[Moscow.pm] Mojo::Log и utf8

Ruslan Zakirov ruz на bestpractical.com
Вт Дек 11 09:16:33 PST 2012


2012/12/11 Grigory Batalov <grisxa на gmail.com>:
> В Tue, 11 Dec 2012 19:34:30 +0300
> Denis Evdokimov <evdokimov.denis на gmail.com> пишет:
>
>> Мне кажется странным, что перл ведёт себя так, как ведёт.

Все задокументировано.

>> perl -we'use utf8; print "$ENV{LANG}\n"; open(my $FH,
>> "non/exist/file"); print "[",utf8::is_utf8($!), "]\n"; print "$!\n";'
>
> В этом примере $! - последовательность байт, и STDOUT открыт в этом
> режиме, поэтому текст читаем. Попробуйте добавить binmode *STDOUT, ":utf8";
>
> use utf8 используется для констант внутри скрипта.

Не только для констант, но в целом верно. Точнее "use utf8; в скрипте
означает только одно - после этой строки КОД написан в UTF-8, но это
никак не определяет данные с которыми этот код работает".

>> Вывод:
>> ru_RU.UTF-8
>> []
>> Нет такого файла или каталога
>>
>> т.е. у него есть все основания выставить utf8 флаг, а именно:
>> 1. use utf8;
>> 2. utf-ная локаль
>> 3. За текст сообщения отвечает ОС -> можно быть уверенным, что
>> кодировка и локаль одинаковые.
>>
>> Есть что-то, что я не учитываю?
>
> Наверное, обратная совместимость :)

Это тот самый missing feature :), но как я писал выше реализация не
должна зависеть от use utf8; Это должна быть новая прагма. Сейчас есть
прагмы для кода, для потоков ввода/вывода, опции для драйверов БД и
неплохо бы заиметь опцию/прагму для системных переменных, как минимум
для $!.

Из похожих "проблем" - это работа с именами файловой системы. Нету
унификации по типу я в перле открываю файл и использую UTF8, а perl
сам сконвертит в нужную кодировку. Хотя эту проблемку будет сложнее
решить.




> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm