#3921From:Stas Mishchenkov
To:Gennadij Pastuhov
Date:18-10-2020 10:57:21
Subj:мозги сломал
Hi, Gennadij!

17 окт 20 16:50, Gennadij Pastuhov -> Stas Mishchenkov:

SM>> use locale;
SM>> # [...]
SM>> undef $fromchrs;
SM>> if ( $Text =~ /\001CHRS\:[ ]*([^ ]+)[ ]+\d+/ ) {

GP> Может, тут лучше так: \s* \s+

Можно и так, но рекэксп-то срабатывает, только в $1 попадает то, чего в тексте вообще нет.

Have nice nights.
Stas Mishchenkov.

--- Мудрость - это когда ты всё понимаешь, но уже не огорчаешься.
* Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858)
SEEN-BY: 460/58 5858 5020/545 1042 4441 6090/1
PATH: 460/5858 58 5020/545 4441 1042 6090/1
#3922From:Stas Mishchenkov
To:Alexey Korotkov
Date:18-10-2020 11:01:20
Subj:мозги сломал
Hi, Alexey!

17 окт 20 22:50, Alexey Korotkov -> Stas Mishchenkov:

SM>> Текст письма содержит кладж "@CHRS: UTF-8 4", но $1 и $fromchrs
SM>> устанавливается CP866. Другие кладжи рспознает, правда, я не проверял,
SM>> все ли. При чем, в данном конкретном случае текст вообще не содержит
SM>> строки CP866. В чем прикол, откуда оно может браться?

AK> А ты уверен что у тебя в строке фактические разделители - проблелы? (см.
AK> в hex-виде)

Посмотрю, конечно, но почему тогда рекэксп срабатывает? Вопрос именн в том, что регэксп возвращает тру, а в $1 то, чего в тексте вообще нет. Если $1 остается установлен с прошлого срабатывания, то куда девается значение из скобок?

Have nice nights.
Stas Mishchenkov.

--- На кашу в голове хорошо бегут тараканы.
* Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858)
SEEN-BY: 460/58 5858 5020/545 1042 4441 6090/1
PATH: 460/5858 58 5020/545 4441 1042 6090/1
#3923From:Gennadij Pastuhov
To:Stas Mishchenkov
Date:18-10-2020 15:44:13
Subj:мозги сломал
Рад всех приветствовать! А особенно - Stas!

Воскресенье октября 18 20 10:57 Stas Mishchenkov писал к Gennadij Pastuhov:

SM>>> use locale;
SM>>> # [...]
SM>>> undef $fromchrs;
SM>>> if ( $Text =~ /\001CHRS\:[ ]*([^ ]+)[ ]+\d+/ ) {

GP>> Может, тут лучше так: \s* \s+

SM> Можно и так, но рекэксп-то срабатывает, только в $1 попадает то, чего
SM> в тексте вообще нет.

Ты уеврен, что он срабатывает? Может, ветка else? Давай сюда построчные логи.

... Jonny wanna live
--- GoldED+/W32 1.1.5-041013 xenofont.chat.ru skype pastuhovgena
* Origin: Hичего на свете лучше нету, чем сидеть за компом до pасс (2:5036/26)
SEEN-BY: 5020/1042 5036/26 6090/1
PATH: 5036/26 5020/1042 6090/1
#3924From:Eugene Grosbein
To:Stas Mishchenkov
Date:22-10-2020 12:12:27
Subj:Re: мозги сломал
17 окт. 2020, суббота, в 11:15 NOVT, Stas Mishchenkov написал(а):

SM> use locale;
SM> # [...]
SM> undef $fromchrs;
SM> if ( $Text =~ /\001CHRS\:[ ]*([^ ]+)[ ]+\d+/ ) {
SM> $fromchrs = lc($1);
SM> writelog("Charset found: \'$fromchrs\'.");
SM> } else {
SM> $fromchrs = 'cp866';
SM> writelog('Warning: No @CHRS kludge. Using default
SM> }

Это не тот код, который реально работает. Этот содержит ошибки и
даже не запустится.

Кроме того, undef лишний. Отдельный пробел незачем забирать в квадратные скобки.
Двоеточие незачем экранировать. Hе отмечено, что матчинг должен идти
с начала строки. Попробуй так:

if ($Text =~ /^.CHRS:\s*([^ ]+)\s+\d+/) {

Eugene
--- slrn/1.0.3 (FreeBSD)
* Origin: RDTC JSC (2:5006/1@fidonet)
SEEN-BY: 5006/1 5020/1042 5080/102 6090/1
PATH: 5006/1 5080/102 5020/1042 6090/1
#3925From:Dmitry Ivanov
To:All
Date:04-02-2021 04:24:20
Subj:__ВФЕФ__
Здравствуйте, All.

Глупый вопрос про __DATA__

Есть очень условный скрипт

my $i;

for $i ( 1 .. 3 ) {

while (<DATA>) {

print "$i+$_\n";
}
}

__DATA__
4
5
6

так вот на первой итерации ($i = 1 DATA "заканчивается". Как
начатьчитать ее сначала?

Я много гуглил, нагуглилЮ что специальный файловый дескриптор.
Пробовал его закрывать close и через seek гонять. Hе получается.

Подскажите, плз, что делать

--
С уважением,
Dmitry


--- InterSquish NNTP Server/FTN Gate
* Origin: www.wfido.ru (2:5023/24.3209)
SEEN-BY: 5020/715 1042 4441 5023/24 6090/1
PATH: 5023/24 5020/715 4441 1042 6090/1
#3926From:Evgeny Chevtaev
To:Dmitry Ivanov
Date:04-02-2021 08:08:29
Subj:__ВФЕФ__
Hi Dmitry!

Thursday February 04 2021 04:24, Dmitry Ivanov wrote to All:

DI> Глупый вопрос про __DATA__
DI> Есть очень условный скрипт
DI> my $i;
DI> for $i ( 1 .. 3 ) {
DI> while (<DATA>) {
DI> print "$i+$_\n";
DI> }
DI> }
DI> __DATA__
DI> 4
DI> 5
DI> 6
DI> так вот на первой итерации ($i = 1 DATA "заканчивается". Как
DI> начатьчитать ее сначала?

my @data = <DATA>;

for my $i ( 1 .. 3 ) {
foreach (@data) {
print "$i+$_\n";
}
}

__DATA__
4
5
6

Так подойдёт?

With best regards,
Evgeny
--- GoldED+/BSD 1.1.5-b20180707
* Origin: Powered by FreeBSD 12.2-RELEASE-p3 (2:5010/275)
SEEN-BY: 5010/275 5020/715 1042 4441 6090/1
PATH: 5010/275 5020/715 4441 1042 6090/1
#3927From:Eugene Grosbein
To:Dmitry Ivanov
Date:04-02-2021 12:24:11
Subj:Re: __ВФЕФ__
04 февр. 2021, четверг, в 04:24 NOVT, Dmitry Ivanov написал(а):

DI> Глупый вопрос про __DATA__
DI> Есть очень условный скрипт
DI> my $i;
DI> for $i ( 1 .. 3 ) {
DI> while (<DATA>) {
DI> print "$i+$_\n";
DI> }
DI> }
DI> __DATA__
DI> 4
DI> 5
DI> 6
DI> так вот на первой итерации ($i = 1 DATA "заканчивается". Как
DI> начатьчитать ее сначала?
DI> Я много гуглил, нагуглилЮ что специальный файловый дескриптор.
DI> Пробовал его закрывать close и через seek гонять. Hе получается.

Hужно понять, что в __DATA__ нет никакой магии:
встретив в первый раз обращение к <DATA>, интерпретатор perl,
уже имея открытый исходник скрипта, находит в нём __DATA__
и делает seek на начало следующей строки, так чтобы
любая работа с <DATA> происходила ровно так же,
как с любым другим файлом.

Поэтому тебе надо действовать, как с любым другим файлом,
в лоб:

my $offset = tell(DATA); # запоминаем исходное смещение
for $i ( 1 .. 3 ) {
seek(DATA, $offset, 0); # переустанавливаем указатель
while (<DATA>) { # читаем с нужной позиции
print "$i+$_\n";
}
}
__DATA__

Eugene
--
И друзей успокоив и ближних любя,
Мы на роли героев вводили себя.
--- slrn/1.0.3 (FreeBSD)
* Origin: RDTC JSC (2:5006/1@fidonet)
SEEN-BY: 5006/1 5020/1042 5080/102 6090/1
PATH: 5006/1 5080/102 5020/1042 6090/1
#3928From:Dmitry Ivanov
To:Dmitry Ivanov
Date:04-02-2021 10:07:20
Subj:Re: __ВФЕФ__
Здравствуйте, Dmitry.

Вы писали 4 февраля 2021 г., 7:24:41:

> Здравствуйте, All.

> Глупый вопрос про __DATA__

> Есть очень условный скрипт

> my $i;

> for $i ( 1 .. 3 ) {

> while (<DATA>) {

> print "$i+$_\n";
> }
> }

> __DATA__
> 4
> 5
> 6

> так вот на первой итерации ($i = 1 DATA "заканчивается". Как
> начатьчитать ее сначала?

> Я много гуглил, нагуглилЮ что специальный файловый дескриптор.
> Пробовал его закрывать close и через seek гонять. Hе получается.

> Подскажите, плз, что делать


Вопрос снимается

my $data_start = tell DATA; # save the position
print while (<DATA>);
seek DATA, $data_start, 0; # reposition the filehandle right past __DATA__
print while (<DATA>);

--
С уважением,
Dmitry
--- InterSquish NNTP Server/FTN Gate
* Origin: www.wfido.ru (2:5023/24.3209)
SEEN-BY: 5020/715 1042 4441 5023/24 6090/1
PATH: 5023/24 5020/715 4441 1042 6090/1
#3929From:Dmitry Ivanov
To:Evgeny Chevtaev
Date:10-02-2021 09:13:06
Subj:Re: __ВФЕФ__
Здравствуйте, Evgeny.

Вы писали 4 февраля 2021 г., 11:08:58:

> Так подойдёт?

Тоже вариант, спасибо
--
С уважением,
Dmitry
--- InterSquish NNTP Server/FTN Gate
* Origin: www.wfido.ru (2:5023/24.3209)
SEEN-BY: 5020/715 1042 4441 5023/24 6090/1
PATH: 5023/24 5020/715 4441 1042 6090/1
#3930From:Evgeny Chevtaev
To:All
Date:04-08-2021 08:09:19
Subj:про regexp
Hi All!

Подскажите, граждане, как в сабжах приоритеты (или как оно по-умному называется) делать?

Есть переменная с многострочным html, где вложенные div'ы:

<html>
Всякая хрень
<div>Почта: васян@домен</div>
<div>Телефон: 123</div>
Всякая хрень
</html>

Hадо почту выкорчевать. Делаю "$body =~ s/.*Почта:\s(.*)<\/div>/$1/", получаю вырезку до последнего div. Как до первого оно делается? Помню, что на эту тему тут пробегал научный труд, но не нашёл того письма.

With best regards,
Evgeny
--- GoldED+/BSD 1.1.5-b20180707
* Origin: Powered by FreeBSD 13.0-RELEASE-p3 (2:5010/275)
SEEN-BY: 5010/275 5020/715 1042 4441 6090/1
PATH: 5010/275 5020/715 4441 1042 6090/1
Выделенный сервер за 149 руб!