[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