я, конечно, понимал, что @_ массив крайне хитрожопый,
да и не массив вообще, но сегодня оно меня выбило из колеи.
Вот код: http://ideone.com/0BeFd
там же и результат выполнения.
exists для элемента @_ не отрабатывает нормально, если @_
ассайнится не на честный список, а на последовательность параметров.
Подтверждается в перлах 8, 10, 12.
Явного описания в документации не нашел, объяснение придумать можно,
то есть за баг я такое поведение не считаю… но все равно неприятно.
Тем более, что вылилось у меня оно на уровне "не вызывается колбек
для обновления значения в кеше при протухании элемента кеша с последующим
вызовом очистки по алгоритму LRU" :) соответственно, полтора часа отладки
и матюгов.
Короче, камрады, знайте, если еще не. Я вот не знал.
--
Олег Алистратов
On 10.08.2011 17:11, und3f wrote:
> *Be aware* that calling exists on array
> values is deprecated and likely to be removed in a future
> version of Perl.
Внесли это замечание в 5.12, и пройдет еще немало времени,
прежде чем зачистят это выражение в куче модулей.
>
> Также проверка на неопределенное значение `defined $_[$i]' не тоже
> самое что проверка существование значения.
> Для массива важно помнить что элементы в нем идут последовательно и
> пробелов быть не может, поэтому проверять наличие элементов стоит
> через количество элементов в массиве.
Спасибо, кэп. В том то и дело, что в приведенном коде элемент массива
_существует_,
он вообще в середине стоит, а exists возвращает false.
-- Олег Алистратов