Current Perl documentation can be found at perldoc.perl.org.
Here is our local, out-dated (pre-5.6) version:
Actually, they don't. All C operators that Perl copies have the same precedence in Perl as they do in C. The problem is with operators that C doesn't have, especially functions that give a list context to everything on their right, eg print, chmod, exec, and so on. Such functions are called ``list operators'' and appear as such in the precedence table in the perlop manpage.
A common mistake is to write:
unlink $file || die "snafu";
This gets interpreted as:
unlink ($file || die "snafu");
To avoid this problem, either put in extra parentheses or use the super low
(unlink $file) || die "snafu"; unlink $file or die "snafu";
The ``English'' operators (
not) deliberately have precedence lower than that of list operators for just
such situations as the one above.
Another operator with surprising precedence is exponentiation. It binds
more tightly even than unary minus, making
-2**2 product a negative not a positive four. It is also right-associating,
2**3**2 is two raised to the ninth power, not eight squared.
Although it has the same precedence as in
?: operator produces an lvalue. This assigns
$x to either
$a or $b, depending on the trueness of $maybe:
($maybe ? $a : $b) = $x;