alexkuklin: (Default)
alexkuklin ([personal profile] alexkuklin) wrote2005-11-27 08:43 pm

Вопрос по perl про переключение локалей

Общая постановка задачи: Как в процессе работы перлового скрипта переключиться с однойдругую на дргугую.


Задача для частного случая: Два раза напечатать дату. Один раз в локале из которой скрипт бвторойщен, втоврой раз
в локале en_US (В системе такая локаль есть)

Пробуем решить:

use strict;
use POSIX;

print strftime("%B %d, %Y",0, 0, 0, 30, 10, 79)."\n";

setlocale('LC_ALL','en_US');
$ENV{'LANGUAGE'} = 'en_US';
$ENV{'LANG'} = 'en_US';
$ENV{'LC_ALL'} = 'en_US';

print strftime("%B %d, %Y",0, 0, 0, 30, 10, 79)."\n"; 


Решение не верное. Оба раза дата выводится по русски...

Где ошибка, куда копать?
vitus_wagner: My photo 2005 (Default)

Re: Кавычки в общем =)

[personal profile] vitus_wagner 2005-11-27 06:44 pm (UTC)(link)
Правило первое user never reads documentation

Там же написано про setlocale буквально следующее:

Modifies and queries
program’s locale. The following examples assume
        use POSIX qw(setlocale LC_ALL LC_CTYPE);


has been issued.



The following will set the traditional
UNIX system locale behavior (the second
argument "C").


        $loc = setlocale( LC_ALL, "C" );



Правило второе - если у юзера не получается удалить файл в /tmp он переустанавливает систему.
НИКОГДА НЕ ПЕРЕСТАВЛЯЙТЕ LC_ALL. Надо время - значит это LC_TIME. Надо верхний/нижний регистр - значит LC_CTYPE. А то огребете грабли с LC_NUMERIC.