19 октября 2016 г., 15:25 пользователь Ivan Petrov <[email protected]> написал: >>> в его гейском (на букву п) виртуальном мире делать не нужно. Юникода в >>> данных в коде программы встречаться не должно. > >> Скорей всего kraih говорил Ивану, что опасно делать`use open qw(:std :utf8)`. > > в тикетах я не участвовал, я обсуждал с ним в IM. > > > насчет опасно делать use open - другого выхода для неlatin-1 говорящих > приложений нет. > > если мы хотим в регекспах иметь возможность написать > > $str = qr{привет\w}; > > то use utf8 - мастхев > > если далее мы хотим этот регексп/строку принтануть, то stdout должен > быть помечен как :utf8. Если мы хотим не дергать decode на каждый чих, > то stdin тоже должен быть помечен так же. > итого получается > > use open ':std:', ':utf8'; > use utf8; > > это мастхев на сегодня. > > Test::More нормально работает с этим > > и вообще все остальное что не считает нужным навязать другим модель. > тебе прислали строку - и надо ее напечатать: печатай и пусть > пользователь видя warning решит что ему сделать: строку тебе прислать > encode'уную или stdout пометить как :utf8. > но нет, же. гомосяки считают что они умнее всех! что просто надо > запретить использование utf8 в тестах с этим мегафреймворком в котором > 5 последних версий только и занимались что переименовывали методы > > secret -> secrets > post_form_ok -> post_ok(form => > итп > > >> В данном примере это работает, но только потому, что Test::More не >> поддерживает юникод > > что такое "поддерживает юникод"? > у Test::More задача тесты запускать, а не юникод поддерживать. > о результатах тестов его задача напечатать сообщение в stdout и > stderr. > причем печатает он в общем виде то, что юзер прислал, либо английский > текст. соответственно Test::More и не нужно поддерживать никакой > юникод, что он с успехом и делает. > > поэтому когда один пишет в no utf8 > > like $str => q{\w}, 'тест пройден'; > > то получает работающий тест, ибо он (видимо) сам знает что такое \w в > no utf8, > а другой кто пишет в utf8 окружении > > like $str => {приве\w,}, 'тест пройден'; > > получает так же работающий тест. И заметьте, Test::More работает в > обоих случаях ибо до него гомосеки пока не добрались "впилить ему > поддержку юникода" > > > "поддержка юникода" это когда пользователь манипулирует строками > естественно, по минимуму прибегая ко всяким encode/decode. > > если пользователю ЗАЧЕМ-то понадобится сконкатенировать blob и utf8, > то он МОЖЕТ это делать, но в среднем это тупая практика и ломать из за > этой тупой практики поведение функций которое не менялось полтора десятка > лет - дебилизм. > в итоге мы придем к питонячьему варианту что hello world и hello world > - не дают в сравнении истину. и видимо 1 и '1' тоже станут со временем > не равны.
как раз здесь https://rt.cpan.org/Public/Bug/Display.html?id=87267#txn-1250086 специально стоит строчка die unless $x eq 'X'; это значит что hello world таки равен hello world, но ты почему-то называешь это "сконкатенировать blob и utf8" а это потому что ты считаешь что utf8 флаг означает текст, хотя это не правда, и что это направда написано в документации, которую ты не читал. и именно чтобы hello world был всегда hello world сделаны фиксы в Encode > Но тогда зачем нужен Perl, я вас спрашиваю? Если 1 != '1' станет? > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
