[Moscow.pm] use encoding и манипуляции со строками

Victor Efimov victor на vsespb.ru
Пт Апр 24 10:36:13 PDT 2015


2015-04-24 19:54 GMT+03:00 Denis Ibaev <dionys на gmail.com>:
> Привет.
>
> Не могу понять, почему в одном случае ниже приведённый скрипт выставляет у
> строки флаг 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
> moscow-pm на pm.org | http://moscow.pm.org
>


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