Хотя операторы выглядят одинаково, их назначение на самом деле другое.
От perldoc perlop :
Binary "||"выполняет операцию логического ИЛИ короткого замыкания.То есть, если левый операнд имеет значение true, правый операнд даже не оценивается.
По сравнению с:
Двоичный "|"возвращает операнды ORed вместе по битам.
Цель ||
состоит в том, чтобы найти ответ на вопрос "is x || y
true или false?", тогда как цель bitwise or
- |
- это придумать произведение (?) Операндов или что-то вроде «каков результат x | y
?»
Поскольку единственные интересные два результата из ||
верныили false, утверждение может (и является) замкнутым, вызывая тем самым этот эффект.
В первом утверждении: (0 | 2) = 2, (2 | 4) = 6
Во втором утверждении: (0 || 2) = 2, (2 || ...) = 2
Интересно, что bitwise or
устанавливает логические значения внутри двоичного числа.Добавление значения true или false в позиции в двоичном представлении числа.
0000 | 0010 = 0010
0010 | 0100 = 0110
0110 | 0001 = 0111
0111 | 0001 = 0111 # no change
Это очень удобно для хранения нескольких логических значений в одном числе, что можно проверить с помощью &
(bitwise AND
).
0101 & 0100 = 0100 (true)
0101 & 0010 = 0000 (false)
Существует 10 видов людей: тех, кто понимает двоичные числа, и тех, кто не понимает.