Все задачи

Истина И ложь

01 Mar 2013
Read this article in English: here.

Однажды прогаммист услышал, что в языке Perl неправильная логика, и решил проверить сам. Он запустил однострочник:

> perl -le '$x = 1 and 0; print $x;'
1

Мда… “Истина” И “ложь”, а в результате – “истина”. Как же так?

Подсказка

Показать

Красиво, когда операции обозначаются понятными английскими словами: and, or, not

Подсказка-2

Показать

А если так?

> perl -le '$x = 1 && 0; print $x;'

Подсказка-3

Показать

Разве нужны в языке две дублирующие друг друга операции: && и and?

Разоблачение

Показать

У операций && и and разный приоритет, и в приведенных однострочниках порядок вычисления различается.

Второй случай похож на Си:

> perl -le '$x = (1 && 0); print $x;'

Но в первом все немного по-другому:

> perl -le '($x = 1) and 0; print $x;'

Мораль: операции and и or имеют очень низкий приоритет и плохо подходят для логических выраженияй. Их место – идиомы вроде @info = stat($file) or die;