Ловушки Perl
Истории-страшилки про Perl-программиста, с подсказками и разоблачениями
Главная
О блоге
Об авторах
Почему?
rss
@perltrapcom
Подписка по email
Однажды прогаммист услышал, что в языке Perl неправильная логика, и решил проверить сам. Он запустил однострочник:
> perl -le '$x = 1 and 0; print $x;'
1
Мда… “Истина” И “ложь”, а в результате – “истина”. Как же так?
Красиво, когда операции обозначаются понятными английскими словами: and
, or
, not
…
А если так?
> perl -le '$x = 1 && 0; print $x;'
Разве нужны в языке две дублирующие друг друга операции: &&
и and
?
У операций &&
и and
разный приоритет,
и в приведенных однострочниках порядок вычисления различается.
Второй случай похож на Си:
> perl -le '$x = (1 && 0); print $x;'
Но в первом все немного по-другому:
> perl -le '($x = 1) and 0; print $x;'
Мораль:
операции and
и or
имеют очень низкий приоритет
и плохо подходят для логических выраженияй.
Их место – идиомы вроде @info = stat($file) or die;