[Moscow.pm] Код работает в 5.8.8 и не работае в 5.10.1, почему?

Oleg Kostyuk cub.uanic на gmail.com
Вт Фев 1 04:06:49 PST 2011


Ну, не сложно объяснить, почему оно работает именно так.

Операторы зарыменования, вроде @{something}, тербуют на месте
something что-либо, возвращающее ссылку. Одну. Т.е. говоря простым
языком - он предоставляет скалярный контекст для своего содержимого.
Хеш в скалярном контексте возвращает соотношение использованного и
выделенного пространства, в виде строки "a/b" (perldoc perldata, /If
you evaluate a hash in scalar context).

Так что результат записи @{%hash}{qw(list)} уже не удивляет. И я думаю
он и не начал бы удивлять, если бы вы запустили его с use warnings.
Хотя сам этого не проверял.

Так же понятно, что оператор "срез хеша", который вероятно и хотелось
получить, выглядит как @hash{qw(list)}.

Ваш вопрос "почему работало и перестало" равносилен вопросу "почему
КРИВОЙ код работал и перестал". Вероятно, потому, что автор кода не
сумел правильно написать срез хеша. Вероятно, потому, что Perl
совершенствуется и начинает допускать всё меньше и меньше
двусмысленностей и неоднозначностей. Вероятно, потому, что это был
один из многочисленных багфиксов. Более детальный ответ на свой вопрос
- я думаю, вы найдёте в changelog-ах от 5.8 до 5.10.

Удачи.


1 февраля 2011 г. 13:37 пользователь Sergey Leschenko
<sergle.ua на gmail.com> написал:
> 2011/2/1 Alexander Lourier <aml на rulezz.ru>:
>> <недоумение>О чём думают программисты, когда пишут такое? Это быстрее работает? Вряд ли хоть какую-то роль играет в этом
>> случае. Это быстрее писать? Как видим, нет - надо ещё в рассылке темы создавать. Это проще поддерживать? Лучше
>> застрелите саппортов, чем такой код им давайте.</недоумение>
>
> Я затрудняюсь сказать о чем думал автор, т.к. им не являюсь.
> Под 5.10 этот фрагмент уже переписал, просто не понимаю почему он
> перестал работать.
>
> --
> Sergey
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Sincerely yours,
Oleg Kostyuk (CUB-UANIC)


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