2011/1/23 Dmitry Karpich <[email protected]>: > > 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 >> [email protected] | http://moscow.pm.org > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Vladimir Timofeev <[email protected]> -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
