[Moscow.pm] tie на стандартные переменные

Vladimir Timofeev vovkasm на gmail.com
Вс Янв 23 10:27:58 PST 2011


2011/1/23 Dmitry Karpich <meettya на gmail.com>:
>
> On Jan 23, 2011, at 1:59 PM, Ivan Petrov wrote:
>
>> > А если use encoding 'utf8'; ?
>>
>> а при чем тут encoding? в него еще искусственный интеллект вроде не встроили чтобы отличать строки с багами от остальных
>>
>
> Кстати, да.
> Проверил на Ubuntu
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
> use encoding 'utf8';
> open qw(:std :utf8);
>
> use locale;
> use POSIX qw(locale_h strtod);
>
> setlocale(LC_ALL, "ru_RU.UTF-8");
>
> my $a = qq(п р и в е т);
> print 'yes'."\n" if ( $a =~ /\w+/ ) ;
> print uc($a),"\n";
>
> open(my $fh, '<', 'decodeabrakadabra/not-found') or die "Ошибка открытия файла: ".$!;
>
> дает нам
>
> $ ./01-test.pl
> yes
> П Р И В Е Т
> Ошибка открытия файла: Нет такого файла или каталога at ./01-test.pl line 18.
>
> т.е. оно верно интерпретирует русский и нормально печатает локализованную ошибку.
>
> Или я опять чего-то не учел?

В принципе в таком виде действительно все как будто должно работать...
но... encoding - стремная фича... в частности:
1. Меняет семантику конкатенации строк, что собственно и лечит "строка
с русским текстом"."байты с русским текстом в utf-8"
2. Глобальная (но именно это и надо)
3. Есть/были баги, но насколько я понимаю если не мешать несколько
разных кодировок, то все должно быть ок
4. Вроде в доках говорят, что НЕ thread safe...

ЗЫ. Я бы постарался запускать приложения в локали C и не парился ;-) А
use encoding использовал только в том случае, если есть тесты и можно
с высокой вероятностью убедиться что все работает после внедрения.

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



-- 
Vladimir Timofeev <vovkasm на gmail.com>


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