Logical or and Exclusive Or
Binary "or"
returns the logical disjunction of the two surrounding expressions. It's equivalent to ||
except for the very low precedence. This makes it useful for control flow:
print FH $data or die "Can't write to FH: $!";
This means that it short-circuits: the right expression is evaluated only if the left expression is false. Due to its precedence, you must be careful to avoid using it as replacement for the ||
operator. It usually works out better for flow control than in assignments:
$x = $y or $z; # bug: this is wrong ($x = $y) or $z; # really means this $x = $y || $z; # better written this way
However, when it's a list-context assignment and you're trying to use ||
for control flow, you probably need "or"
so that the assignment takes higher precedence.
@info = stat($file) || die; # oops, scalar sense of stat! @info = stat($file) or die; # better, now @info gets its due
Then again, you could always use parentheses.
Binary "xor"
returns the exclusive-OR of the two surrounding expressions. It cannot short-circuit (of course).
There is no low precedence operator for defined-OR.
Please login to continue.