Rob*_*lls 15 perl operator-precedence
在阅读最新版的The Camel Book时,我对p522上的以下代码片段感到震惊:
use Fcntl ":flock";
eval {
local $SIG{ALRM} = sub { die "alarm clock restart" };
alarm 10; # schedule alarm in 10 seconds
eval {
flock(FH, LOCK_EX) # a blocking, exclusive lock
|| die "can't flock: $!";
};
alarm 0; # cancel the alarm
};
alarm 0; # race condition protection
die if $@ && $@ !~ /alarm clock restart/; # reraise
Run Code Online (Sandbox Code Playgroud)
我被告知你应该总是使用低优先级逻辑OR运算符'或'优先于逻辑OR运算符'||'.
在本书中进一步展望,我看到许多使用相同逻辑的其他示例.
规则或优先级是否已更改?
或者是'||'的处理 和'或'在更高版本的Perl中更改?(不幸的是,由于遗留代码,我们被焊接到5.6.1 atm).
cho*_*oba 22
优先权||并or没有改变.如果你没有在函数属性周围使用括号,使用||with die有点危险,考虑一下
flock FH, LOCK_EX || die "can't flock: $!"; # WRONG!
Run Code Online (Sandbox Code Playgroud)
这就是为什么有些人喜欢or控制结构.括号中没有区别.