From: Eugene Grosbein grosbein.net 18 Jul 2019 18:00 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
18 июля 2019, четверг, в 09:27 NOVT, Stas Mishchenkov написал(а): SM>>> Между тем мой эмпириокритицизм позволил мне все-таки найти корень SM>>> проблемы. #!/usr/bin/perl use POSIX; use locale; my $old_locale; SM>>> $old_locale = setlocale(LC_CTYPE); SM>>> print "$old_locale\n"; SM>>> в командной строке печатает ru_RU.IBM866, а в filter.pl SM>>> use POSIX; SM>>> use locale; SM>>> my $old_locale; SM>>> $old_locale = setlocale(LC_CTYPE); SM>>> w_log( "locale: $old_locale\n" ); SM>>> пишет в лог "locale: С". EG>> 90% за то, что система запускает бинарник без выставления локали. SM> Гм. Он у меня действительно по крону запускается от имени пользователя fido, у SM> которого, впрочем, локаль установлена нужная. Если не делать отдельных телодвижений, то локаль вместе со всем окружением наследуется от процесса-родителя, в данном случае от крона. Поменяй строку запуска "команда" на: env LC_ALL=ru_RU.IBM866 команда Eugene
From: Alexey Vissarionov 2:5020/545 18 Jul 2019 12:34 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
Доброго времени суток, Stas! 18 Jul 2019 09:27:28, ты -> Eugene Grosbein: SM>>> пишет в лог "locale: С". EG>> 90% за то, что система запускает бинарник без выставления локали. SM> Гм. Он у меня действительно по крону запускается от имени пользователя SM> fido, у которого, впрочем, локаль установлена нужная. Локаль - свойство процесса, а не пользователя и уж тем более не системы. -- Alexey V. Vissarionov aka Gremlin from Kremlin gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii ... Чем умные отличаются от дураков? Умные дурачатся, а дураки умничают.
From: Stas Mishchenkov 2:460/5858 18 Jul 2019 09:27 +0300
To: Eugene Grosbein grosbein.net
Subject: что я не так делаю?
Hi, Eugene! 17 июл 19 18:27, Eugene Grosbein -> Stas Mishchenkov: SM>> Между тем мой эмпириокритицизм позволил мне все-таки найти корень SM>> проблемы. #!/usr/bin/perl use POSIX; use locale; my $old_locale; SM>> $old_locale = setlocale(LC_CTYPE); SM>> print "$old_locale\n"; SM>> в командной строке печатает ru_RU.IBM866, а в filter.pl SM>> use POSIX; SM>> use locale; SM>> my $old_locale; SM>> $old_locale = setlocale(LC_CTYPE); SM>> w_log( "locale: $old_locale\n" ); SM>> пишет в лог "locale: С". EG> 90% за то, что система запускает бинарник без выставления локали. Гм. Он у меня действительно по крону запускается от имени пользователя fido, у которого, впрочем, локаль установлена нужная. Have nice nights. Stas Mishchenkov.
From: Eugene Grosbein grosbein.net 17 Jul 2019 18:27 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
17 июля 2019, среда, в 10:49 NOVT, Stas Mishchenkov написал(а): SM> Между тем мой эмпириокритицизм позволил мне все-таки найти корень проблемы. SM> #!/usr/bin/perl SM> use POSIX; SM> use locale; SM> my $old_locale; SM> $old_locale = setlocale(LC_CTYPE); SM> print "$old_locale\n"; SM> в командной строке печатает ru_RU.IBM866, а в filter.pl SM> use POSIX; SM> use locale; SM> my $old_locale; SM> $old_locale = setlocale(LC_CTYPE); SM> w_log( "locale: $old_locale\n" ); SM> пишет в лог "locale: С". 90% за то, что система запускает бинарник без выставления локали. Eugene -- Поэты - страшные люди. У них все святое.
From: Stas Mishchenkov 2:460/5858 17 Jul 2019 10:49 +0300
To: Eugene Grosbein grosbein.net
Subject: что я не так делаю?
Hi, Eugene! 14 июл 19 20:54, Eugene Grosbein -> Stas Mishchenkov: SM>> Вот и я думаю, что это глюк реализации пердла в HPT. EG> Я очень сильно сомневаюсь, что в HPT есть своя реализация perl EG> или перловского word splitting. Будем точнее. Реализация перлхуков. EG> Мне не очень понятно, почему ты игнорируешь информацию о том, как EG> именно работает word splitting в perl и почему ты до сих пор не EG> потестировал, как было предложено. Такое ощущение, что тебе проблему EG> решать и не надо. Между тем мой эмпириокритицизм позволил мне все-таки найти корень проблемы. #!/usr/bin/perl use POSIX; use locale; my $old_locale; $old_locale = setlocale(LC_CTYPE); print "$old_locale\n"; в командной строке печатает ru_RU.IBM866, а в filter.pl use POSIX; use locale; my $old_locale; $old_locale = setlocale(LC_CTYPE); w_log( "locale: $old_locale\n" ); пишет в лог "locale: С". Have nice nights. Stas Mishchenkov.
From: Eugene Grosbein grosbein.net 14 Jul 2019 20:54 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
13 июля 2019, суббота, в 23:18 NOVT, Stas Mishchenkov написал(а): SM> Вот и я думаю, что это глюк реализации пердла в HPT. Я очень сильно сомневаюсь, что в HPT есть своя реализация perl или перловского word splitting. Мне не очень понятно, почему ты игнорируешь информацию о том, как именно работает word splitting в perl и почему ты до сих пор не потестировал, как было предложено. Такое ощущение, что тебе проблему решать и не надо. Eugene -- Поэты - страшные люди. У них все святое.
From: Stas Mishchenkov 2:460/5858 13 Jul 2019 23:18 +0300
To: Eugene Grosbein grosbein.net
Subject: что я не так делаю?
Hi, Eugene! 10 июл 19 16:59, Eugene Grosbein -> Stas Mishchenkov: AV>>>>> И на то, что ТС начисто проигнорировал рекомендации держать AV>>>>> фидошный AV>>>>> софт в локали KOI8-R. SM>>>> Объясни простым языком, зачем нужна двойная перекодировка? EG>>> Чтобы корректно работал софт, заточенный только под KOI8-R EG>>> и который никто уже не будет переписывать под другие кодировки. SM>> т.е. ты хочешь сказать, что если у меня перловый скрипт корректно SM>> отрабатывает вот такой код: use locale; SM>> @wrds = split(' ', $s_words); SM>> foreach $w ( @wrds ) { SM>> if ( $msgtext =~ /(.{0,10})\b($w)\b(.{0,10})/si ) { SM>> print "Found: $1__$2__$3\n"; SM>> } else { print "\'$w\' not found.\n"; } SM>> } SM>> и при этом тот же код не работает в прелхуке HPT, то в KOI8-R все будет SM>> работать и там? EG> Без понятия, надо тестировать. Вот и я думаю, что это глюк реализации пердла в HPT. EG> Hо у меня есть код, который вынужден работать с данными в неизвестной EG> внешней кодировке в отсутствие метаданных. В норме там обычно приходит EG> windows-1251, но из-за багов может поступить сырой utf-8 и код EG> обрабатывает оба случая, приводя всё к общему EG> знаменателю. Исходные данные в переменной $tmp: EG> # detect UTF-8 encoding, otherwise assume 8-bit windows-1251 EG> # Convert to internal Perl unicode EG> $tmp = $s1 = utf8::decode($tmp) ? $tmp : EG> Encode::decode('windows-1251', $s1, Encode::FB_PERLQQ); EG> Можешь что-то подобное нарисовать и себе. Но у меня-то кодировка выв базе известна. EG> Hо у меня код работает *без* use locale (мне не надо делать word EG> splitting). А мне как раз нужно split и \b$word\b юзать, а для этого use locale;. Have nice nights. Stas Mishchenkov.
From: Eugene Grosbein grosbein.net 10 Jul 2019 16:59 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
10 июля 2019, среда, в 09:53 NOVT, Stas Mishchenkov написал(а): AV>>>> И на то, что ТС начисто проигнорировал рекомендации держать фидошный AV>>>> софт в локали KOI8-R. SM>>> Объясни простым языком, зачем нужна двойная перекодировка? EG>> Чтобы корректно работал софт, заточенный только под KOI8-R EG>> и который никто уже не будет переписывать под другие кодировки. SM> т.е. ты хочешь сказать, что если у меня перловый скрипт корректно отрабатывает SM> вот такой код: SM> use locale; SM> @wrds = split(' ', $s_words); SM> foreach $w ( @wrds ) { SM> if ( $msgtext =~ /(.{0,10})\b($w)\b(.{0,10})/si ) { SM> print "Found: $1__$2__$3\n"; SM> } else { print "\'$w\' not found.\n"; } SM> } SM> и при этом тот же код не работает в прелхуке HPT, то в KOI8-R все будет SM> работать и там? Без понятия, надо тестировать. Hо у меня есть код, который вынужден работать с данными в неизвестной внешней кодировке в отсутствие метаданных. В норме там обычно приходит windows-1251, но из-за багов может поступить сырой utf-8 и код обрабатывает оба случая, приводя всё к общему знаменателю. Исходные данные в переменной $tmp: # detect UTF-8 encoding, otherwise assume 8-bit windows-1251 # Convert to internal Perl unicode $tmp = $s1 = utf8::decode($tmp) ? $tmp : Encode::decode('windows-1251', $s1, Encode::FB_PERLQQ); Можешь что-то подобное нарисовать и себе. Hо у меня код работает *без* use locale (мне не надо делать word splitting). Eugene -- Устав от вечных упований, Устав от радостных пиров
From: Stas Mishchenkov 2:460/5858 10 Jul 2019 09:53 +0300
To: Eugene Grosbein grosbein.net
Subject: что я не так делаю?
Hi, Eugene! 09 июл 19 17:15, Eugene Grosbein -> Stas Mishchenkov: AV>>> И на то, что ТС начисто проигнорировал рекомендации держать фидошный AV>>> софт в локали KOI8-R. SM>> Объясни простым языком, зачем нужна двойная перекодировка? EG> Чтобы корректно работал софт, заточенный только под KOI8-R EG> и который никто уже не будет переписывать под другие кодировки. т.е. ты хочешь сказать, что если у меня перловый скрипт корректно отрабатывает вот такой код: use locale; @wrds = split(' ', $s_words); foreach $w ( @wrds ) { if ( $msgtext =~ /(.{0,10})\b($w)\b(.{0,10})/si ) { print "Found: $1__$2__$3\n"; } else { print "\'$w\' not found.\n"; } } и при этом тот же код не работает в прелхуке HPT, то в KOI8-R все будет работать и там? Have nice nights. Stas Mishchenkov.
From: Eugene Grosbein grosbein.net 09 Jul 2019 17:15 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
09 июля 2019, вторник, в 10:41 NOVT, Stas Mishchenkov написал(а): AV>> И на то, что ТС начисто проигнорировал рекомендации держать фидошный AV>> софт в локали KOI8-R. SM> Объясни простым языком, зачем нужна двойная перекодировка? Чтобы корректно работал софт, заточенный только под KOI8-R и который никто уже не будет переписывать под другие кодировки. Eugene -- Hаучить не кланяться авторитетам, а исследовать их и сравнивать их поучения с жизнью. Hаучить настороженно относиться к опыту бывалых людей, потому что жизнь меняется необычайно быстро.