Личное ИМХО - выпилить такой модуль. Это совсем зло такое делать. Одна из проблем use encoding - как раз глобальное влияние на весь процесс, чего лишены всякие 'use utf8'
24 апреля 2015 г., 20:52 пользователь Denis Ibaev <[email protected]> написал: > Я б не изучал, но её подключает какой-то модуль из зависимостей проекта. > Из-за чего в Mojolicious ломается декодирование параметров, содержащих JSON > с кириллицей. Потому что url_unescape начинает возвращать строку с флагом, и > она дальше не может быть перекодирована в нужную кодировку. > > 24 апреля 2015 г., 20:36 пользователь Victor Efimov <[email protected]> > написал: > >> >> 2015-04-24 19:54 GMT+03:00 Denis Ibaev <[email protected]>: >> > Привет. >> > >> > Не могу понять, почему в одном случае ниже приведённый скрипт выставляет >> > у >> > строки флаг utf8, а в другом нет. Без прагмы encoding такого эффекта не >> > наблюдается. Может кто-нибудь объяснить? >> >> Наверное баг в прагме encoding? Она deprecated: "This module has been >> deprecated since perl v5.18.", как раз из-за своего странного >> поведения. >> Т.е. ответа на поставленный вопрос у меня нет, просто уточняю что эта >> прагма кривая и может и не стоит её поведение изучать. >> >> > >> > Вывод скрипта: >> > >> > v1 is utf-8 = 0 >> > v2 is utf-8 = 0 >> > v1 is utf-8 = 1 >> > v2 is utf-8 = 0 >> > >> > Сам скрипт: >> > >> > use strict; >> > use warnings; >> > use v5.12; >> > use utf8; >> > >> > use encoding 'utf-8'; >> > >> > my $v1 = ''; >> > my $v2 = ''; >> > >> > utf8::downgrade($v1); >> > utf8::downgrade($v2); >> > >> > say 'v1 is utf-8 = ', utf8::is_utf8($v1) || 0; >> > say 'v2 is utf-8 = ', utf8::is_utf8($v2) || 0; >> > >> > $v1 .= chr(hex($_)) for qw(22 D0); >> > $v2 .= chr(hex($_)) for qw(D0); >> > >> > say 'v1 is utf-8 = ', utf8::is_utf8($v1) || 0; >> > say 'v2 is utf-8 = ', utf8::is_utf8($v2) || 0; >> > >> > Окружение: >> > >> > $ perl -v >> > This is perl 5, version 14, subversion 2 (v5.14.2) built for >> > x86_64-linux-gnu-thread-multi >> > (with 57 registered patches, see perl -V for more detail) >> > >> > $ perl -MEncode -E 'say Encode->VERSION' >> > 2.73 > > -- > Денис Ибаев > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
