> Этот скрипт из консоли выдает "Yes!", а как cgi, из-под Apache, то "No!"
>
> #!/usr/bin/perl -w
>
> use POSIX qw(locale_h);
> use strict;
>
> $ENV{LANG}='ru_RU.KOI8'; #это все от безысходности :(
> $ENV{LC_ALL}='ru_RU.KOI8';
> $ENV{LC_CTYPE}='ru_RU.KOI8';
> setlocale(LC_ALL,'ru_RU.KOI8');
> setlocale(LC_CTYPE,'ru_RU.KOI8');
> use locale;
>
> $a='ляляля';
>
> print "Content-type: text/plain\n\n";
>
> if($a=~/\w+/) { print "Yes!\n"; }
> else { print "No!\n"; }
>
> #конец.
>
> Причем неважно, под mod_perl или под чистым perl.
> Почему?
А какая система?? Я, кроме как на Irix-e, ни где не встречал такую
locale как 'ru_RU.KOI8'? Это первое.
Второе, 'use locale;' так же вызывает setlocale, используя
environment, но, как я понимаю, не из $ENV - это только его копия.
Поэтому, ставить 'use locale;' после setlocale вредно.
Я думаю, если вы в шеле удалите LC_* и LANG, то получите результат
аналогичный cgi.
Это хорошо показывает: print `locale`;
Кстати, $ENV переходит к потомкам!!! Вообщем, это их окружение.
Исходя из сказаного:
#!/usr/bin/perl -w
use locale;
use POSIX qw(locale_h);
$lang='ru_RU.KOI8-R' # уточнить в /usr/{share,lib}/locale/
setlocale(LC_CTYPE,$lang);
setlocale(LC_COLLATE,$lang);
# Если будут потомки:
$ENV{LC_CTYPE}=$lang;
$ENV{LC_COLLATE}=$lang;
...
--
С наилучшими пожеланиями, Евгений Бырганов.
Best regards, Eugene Byrganov.
mailto:E.B.Byrganov@inp.nsk.su
work - http://www.inp.nsk.su/
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =