This is probably a minor point, but I was wondering why Perl's logical operators (&&
, ||
, and !
) take precedence over the easily understandable "English" logical operators (and
, or
and not
). Is there any advantage of using the former set and any disadvantage of using the latter set in a script?
The logical operators are used primarily in the expression evaluation to make a decision. These operators allow the evaluation and manipulation of specific bits within the integer. This operator returns true if all relational statements combined with && are true, else it returns false.
$a || $b performs logical OR of two variables or expressions. The logical || operator checks either a variable or expression is true.
If ||
and or
had the same precedence, then
return some_func $test1 || $test2;
would mean
return some_func($test1) || $test2;
instead of
return some_func($test1 || $test2);
or
some_func $test1 or die;
would mean
some_func($test1 or die);
instead of
some_func($test1) or die;
Neither of those changes are desirable.
And while one could debate or
is more easily understood than ||
, it's harder to read. It's easier to read code when the operators don't look like their operands.
The original &&
, ||
and !
operators are high precedence to match the C language.
The newer (but still old) and
, or
and not
operators were added to simplify some common constructs. For example, compare:
open my $fh, '<', $filename || die "A horrible death!";
open my $fh, '<', $filename or die "A horrible death!";
The first of these is incorrect; the high priority ||
binds with $filename
and die
which is not what you want. The second is correct; the low priority or
means that the missing parentheses do not lead to ambiguity.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With