[Moscow.pm] Странности и неожиданности Perl

Сергей Мартынов sergey на martynov.info
Пт Фев 29 08:36:52 PST 2008


>  sub aa {
>     my $bad_day = 1;
>     return if $bad_day;
>     return 'bla-bla-bla';
>  }
>
>  my $test = {
>     a => aa,
>     b => 1,
>  };
>
>  Очень многие используют return if/unless для выхода и вот к чему это может привести. Особенно следует учитывать при использовании чужих библиотек :)

Ну это не проблема таких функций, а проблема их использования. Писать
return вместо return undef - правильно и рекомендуется всякими best
practices. А вот использовать при создании хэша вызовы функции надо
очень осторожно, с пониманием контекстов - и это действительно
распространенная ошибка. В общем случае - спасает scalar.

Кстати, пару месяцев назад (в соответствующем списке рассылки)
обнаружили подобную ошибку в таком давнем и известном продукте, как
Template-Tolkit ;) Там тоже сдвигались/переворачивались значения в
хэше, а работало это только потому, что по дефолту значения были
пустыми строками - так что по несуществующим ключам доставалось undef
и все работало.


-- 
С уважением, Сергей Мартынов.


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