你应该使用'||'吗?或在Perl中报告错误时降低优先级'或'?

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控制结构.括号中没有区别.

  • 我更喜欢使用|| 用于逻辑(例如在'if'条件内)和'或'用于控制流(例如...或die). (3认同)