Относительно Perl:
В отличие от PHP (но, как и Python, JavaScript и т. Д.), Логические операторы не возвращают логическое значение, но значение, которое сделало выражение истинным (или последнее значение) определяет конечный результат выражение † ( источник ).
$b=1 && $a=5
оценивается как
$b = (1 && $a=5) // same as in PHP
, что совпадает с $b = (1 && 5)
(присваивание «возвращает» присвоенное значение) и присваивает 5
$b
.
Суть в следующем: приоритет операторов одинаков в Perl и PHP (по крайней мере, в этом случае), но они отличаются тем, какое значение возвращается булевыми операторами.
FWIW, приоритет оператора PHP можно найти здесь .
Что еще более интересно (по крайней мере, для меня это было новым), PHP не выполняет преобразование типов для операторов увеличения / уменьшения.
Таким образом, если $b
равно true
, то $b++
оставляет значение как true
, в то время как, например, $b += 1
присваивает 2
$b
.
†: Я имею в виду, что он возвращает первое (крайнее левое) значение, которое
- оценивается как
false
в случае &&
- оценивается как
true
в случае ||
или последнее значение выражения.