#3801From:Stas Mishchenkov
To:Eugene Grosbein
Date:10-07-2019 09:53:18
Subj:что я не так делаю?
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.

--- На халяву не только уксус сладок, но и свинина постна, халяльна и кошерна.
* 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
#3802From:Eugene Grosbein
To:Stas Mishchenkov
Date:10-07-2019 16:59:26
Subj:Re: что я не так делаю?
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
--
Устав от вечных упований,
Устав от радостных пиров
--- 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
#3803From:Stas Mishchenkov
To:Eugene Grosbein
Date:13-07-2019 23:18:07
Subj:что я не так делаю?
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.

--- Мне бесполезно что-либо запрещать, я и так не собираюсь ничего делать.
* 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
#3804From:Eugene Grosbein
To:Stas Mishchenkov
Date:14-07-2019 20:54:27
Subj:Re: что я не так делаю?
13 июля 2019, суббота, в 23:18 NOVT, Stas Mishchenkov написал(а):

SM> Вот и я думаю, что это глюк реализации пердла в HPT.

Я очень сильно сомневаюсь, что в HPT есть своя реализация perl
или перловского word splitting. Мне не очень понятно,
почему ты игнорируешь информацию о том, как именно работает
word splitting в perl и почему ты до сих пор не потестировал,
как было предложено. Такое ощущение, что тебе проблему решать и не надо.

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
#3805From:Stas Mishchenkov
To:Eugene Grosbein
Date:17-07-2019 10:49:07
Subj:что я не так делаю?
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.

--- Это только от большого ума горе, а от маленького - так, легкая грусть.
* 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
#3806From:Eugene Grosbein
To:Stas Mishchenkov
Date:17-07-2019 18:27:19
Subj:Re: что я не так делаю?
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
--
Поэты - страшные люди. У них все святое.
--- 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
#3807From:Stas Mishchenkov
To:Eugene Grosbein
Date:18-07-2019 09:27:14
Subj:что я не так делаю?
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.

--- У одних людей, полушария прикрываются костями черепа, у других - штанами.
* 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
#3808From:Alexey Vissarionov
To:Stas Mishchenkov
Date:18-07-2019 12:34:28
Subj:что я не так делаю?
Доброго времени суток, 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

... Чем умные отличаются от дураков? Умные дурачатся, а дураки умничают.
--- /bin/vi
* Origin: ****://******.*****/Owl/ru (2:5020/545)
SEEN-BY: 5020/545 1042 4441 6090/1
PATH: 5020/545 4441 1042 6090/1
#3809From:Eugene Grosbein
To:Stas Mishchenkov
Date:18-07-2019 18:00:16
Subj:Re: что я не так делаю?
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
--- 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
Выделенный сервер за 149 руб!