ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] =?KOI8-R?Q?=EC=CF=CB=C1=CC=D8?= =?KOI8-R?Q?_=D7?=CGI =?KOI8-R?Q?=D0=CF=C4?= Apache.



> Этот скрипт из консоли выдает "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                 =



 




Copyright © Lexa Software, 1996-2009.