[Moscow.pm] use utf8 & hashes

Ivan B. Serezhkin ivan на serezhkin.com
Ср Фев 20 05:45:59 PST 2008


Привет

Всё очень просто.
Этот хэш сздаётся на этапе компиляции, а не выполнения.
Соответственно оператор => берёт первый ключ и запихивает его в хэш как 
строку не задумываясь.
А вотрой ключ находится в кавычках, и к нему применяется правила для 
строки, которые гласят, что если нет юникода - то нечево и выпендриватся.
my $str='OnlyLatinSymbols';
print U($str);
А откуда такие дурацкие правила - я не знаю.

Sergey Homenkow wrote:
> Приветствую!
>
> Имеем perl v5.8.8 и код:
>
> =====
> use utf8;
>
> my %s = (
>      MaxAccountSize1   => 1,
>      'MaxAccountSize2' => 1,
>      );
>
> foreach (sort keys %s) {
>      print "'$_' ".U($_)." => '".$s{$_}."' ".U($s{$_})."\n";
> }
>
> sub U {
>      return utf8::is_utf8($_[0])?'is_utf8':'not_utf8';
> }
> =====
>
> Имеем результат:
> 'MaxAccountSize1' is_utf8 => '1' not_utf8
> 'MaxAccountSize2' not_utf8 => '1' not_utf8
>
> Кто-нибудь может подсказать почему так получается с ключами хеша?
>
> '-MO=Deparse' показывает:
> my(%s) = ('MaxAccountSize1', 1, 'MaxAccountSize2', 1);
> т.е. выглядят они одинаково.
>
> ______________________________________________________________________
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm


-- 
Ivan B. Serezhkin



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