Доброго здоровья!<br><br><div class="gmail_quote">3 марта 2010 г. 10:24 пользователь Sergey Homenkow <span dir="ltr">&lt;<a href="mailto:sergey@homenkow.ru">sergey@homenkow.ru</a>&gt;</span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
У меня:<br>This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi<br><br><div class="gmail_quote">3 марта 2010 г. 12:20 пользователь Andrei <span dir="ltr">&lt;<a href="mailto:andrei.protasovitski@gmail.com" target="_blank">andrei.protasovitski@gmail.com</a>&gt;</span> написал:<div class="im">
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Доброго здоровья!<br><br><div class="gmail_quote">3 марта 2010 г. 8:38 пользователь Sergey Homenkow <span dir="ltr">&lt;<a href="mailto:sergey@homenkow.ru" target="_blank">sergey@homenkow.ru</a>&gt;</span> написал:<div>

<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Вот, кстати:<br><br>% perl -E &#39;use utf8; $a{x} = 2; say utf8::is_utf8(keys %a) ? 1 : 0&#39;<br>1<br>% perl -E &#39;use utf8; $a{&quot;x&quot;} = 2; say utf8::is_utf8(keys %a) ? 1 : 0&#39;<br>0<br><br>Это ко всем bareword относиться.<br>


</blockquote></div><div><br>Однако<div><br><br>$ perl -E &#39;use utf8; $a{&#39;x&#39;} = 2; say utf8::is_utf8(keys %a) ? 1 : 0&#39;<br>1<br> </div></div></div></blockquote></div></div></blockquote><div><br>Если внимательно посмотреть, то я взял в одинарные кавычки, а не в двойные. Это важно. И bareword тут ни при чём.<br>
<br>Дело в том, что <font face="courier new,monospace">use utf8;</font> делает все строковые константы utf8, т.е. ставит на строку флаг utf8. Строка в одинарных кавычках, равно как и ключ хэша, считаются строковыми константами, в то время как строка в двойных кавычках суть строковое выражение, которое может содержать интерполяцию. По умолчанию результат такого выражения не utf8. Об этом даже сказано в <font face="courier new,monospace">perldoc utf8</font>:<br>
<br>Note that if you have bytes with the eighth bit on in your script (for example embedded Latin-1 in your string literals), &quot;use utf8&quot; will be unhappy since the bytes are most probably not well-formed UTF-X.  If you want to have such bytes under &quot;use utf8&quot;, you can disable this pragma until the end the block (or file, if at top level) by &quot;no utf8;&quot;.<br>
<br><br>Лично я кавычки в ключах ставлю только тогда, когда ключ содержит пробелы. Но, честно говоря, я не помню, когда мне в последний раз понадобилось писать ключи с пробелами в коде. <br clear="all"></div></div><br>-- <br>
Andrei Protasovitski<br>&lt; andrei[dot]protasovitski[at]gmail[dot]com &gt;<br>Diemen, Netherlands<br>