Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

мозги сломал

2 views
Skip to first unread message

Stas Mishchenkov

unread,
Oct 17, 2020, 4:36:20 AM10/17/20
to
Hi, All!

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

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

Have nice nights.
Stas Mishchenkov.

Gennadij Pastuhov

unread,
Oct 17, 2020, 10:01:21 AM10/17/20
to
Рад всех приветствовать! А особенно - Stas!

Суббота октября 17 20 11:15 Stas Mishchenkov писал к All:

SM> use locale;
SM> # [...]
SM> undef $fromchrs;
SM> if ( $Text =~ /\001CHRS\:[ ]*([^ ]+)[ ]+\d+/ ) {
Может, тут лучше так: \s* \s+
SM> $fromchrs = lc($1);
SM> writelog("Charset found: \'$fromchrs\'.");
SM> } else {
SM> $fromchrs = 'cp866';
SM> writelog('Warning: No @CHRS kludge. Using default
SM> }

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

Что говорит regex101 ? ИМХО, дело в символе \001

... Jonny wanna live

Alexey Korotkov

unread,
Oct 17, 2020, 5:11:20 PM10/17/20
to
Здpавствуй, Stas!

Суббота 17 Октября 2020 11:15, ты писал(а) All, в сообщении по ссылке
area://ru.perl?msgid=2:460/5858+5f8aab78:


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


С уважением - Alexey

Stas Mishchenkov

unread,
Oct 18, 2020, 4:06:21 AM10/18/20
to
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 попадает то, чего в тексте
вообще нет.

Stas Mishchenkov

unread,
Oct 18, 2020, 4:11:21 AM10/18/20
to
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 остается
установлен с прошлого срабатывания, то куда девается значение из скобок?

Gennadij Pastuhov

unread,
Oct 18, 2020, 8:51:21 AM10/18/20
to
Рад всех приветствовать! А особенно - 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

Eugene Grosbein

unread,
Oct 22, 2020, 1:26:23 AM10/22/20
to
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
0 new messages