[Moscow.pm] Брать ли ключ хеша в кавычки?

Andrei andrei.protasovitski на gmail.com
Ср Мар 3 01:38:28 PST 2010


Доброго здоровья!

3 марта 2010 г. 10:24 пользователь Sergey Homenkow <sergey на homenkow.ru>написал:

> У меня:
> This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi
>
> 3 марта 2010 г. 12:20 пользователь Andrei <andrei.protasovitski на gmail.com>написал:
>
> Доброго здоровья!
>>
>> 3 марта 2010 г. 8:38 пользователь Sergey Homenkow <sergey на homenkow.ru>написал:
>>
>> Вот, кстати:
>>>
>>> % perl -E 'use utf8; $a{x} = 2; say utf8::is_utf8(keys %a) ? 1 : 0'
>>> 1
>>> % perl -E 'use utf8; $a{"x"} = 2; say utf8::is_utf8(keys %a) ? 1 : 0'
>>> 0
>>>
>>> Это ко всем bareword относиться.
>>>
>>
>> Однако
>>
>>
>> $ perl -E 'use utf8; $a{'x'} = 2; say utf8::is_utf8(keys %a) ? 1 : 0'
>> 1
>>
>>
>
Если внимательно посмотреть, то я взял в одинарные кавычки, а не в двойные.
Это важно. И bareword тут ни при чём.

Дело в том, что use utf8; делает все строковые константы utf8, т.е. ставит
на строку флаг utf8. Строка в одинарных кавычках, равно как и ключ хэша,
считаются строковыми константами, в то время как строка в двойных кавычках
суть строковое выражение, которое может содержать интерполяцию. По умолчанию
результат такого выражения не utf8. Об этом даже сказано в perldoc utf8:

Note that if you have bytes with the eighth bit on in your script (for
example embedded Latin-1 in your string literals), "use utf8" will be
unhappy since the bytes are most probably not well-formed UTF-X.  If you
want to have such bytes under "use utf8", you can disable this pragma until
the end the block (or file, if at top level) by "no utf8;".


Лично я кавычки в ключах ставлю только тогда, когда ключ содержит пробелы.
Но, честно говоря, я не помню, когда мне в последний раз понадобилось писать
ключи с пробелами в коде.

-- 
Andrei Protasovitski
< andrei[dot]protasovitski[at]gmail[dot]com >
Diemen, Netherlands
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20100303/e86d6299/attachment.html>


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