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