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:
1 | 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:
1 2 3 | $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.
1 2 | @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.