这个 perl 表达式“”是什么?
$DEBUG>=3 && DEBUG("OK=$ok");
让我如此困惑的主要是布尔操作“&&”。任何人都可以为我解释一下吗?谢谢。
它与以下内容相同:
if( $DEBUG >= 3 ) {
DEBUG("OK=$ok");
}
或者
DEBUG("OK=$ok") if $DEBUG >= 3;
我个人更喜欢这个(它对我来说更具可读性)
解释:
Sentence1 && Sentence2
Sentence2
Sentence1
只有当为真时才会执行。&& 运算符是逻辑与,因此如果第一句为假,则完整的操作将为假(无需评估第二句)
$DEBUG 必须等于或大于 3,并且return
来自 的值也sub DEBUG
必须如此true
。True
意味着,它不是
带有 subs 的布尔部分也将被执行。因此,如果您的表达式在if
子句中,则该return
值将是该表达式的一部分。例如。
sub test {
return 1;
}
if ( $abc >2 && test() ) {
...
}
引用perlop:
C 风格的逻辑与
二进制“&&”执行短路逻辑与运算。也就是说,如果左操作数为假,则甚至不计算右操作数。如果计算,标量或列表上下文会向下传播到正确的操作数。
是&&
一个与运算符。然而,与 一样C
,Perl 使用逻辑快捷方式。如果左边是假的,你就知道整个陈述是假的,所以你不必测试右边。但是,如果左侧为真,则必须测试右侧以确保整个语句为真。
因此,如果$DEBUG >= 3
为真,则将执行右侧$OK = "ok"
。它与以下内容相同:
if ( $DEBUG >= 3 ) {
$OK = "ok";
}
而且,我会争辩说,最好像我一样把它写出来1。即使您知道&&
逻辑语句中的内容,您的大脑也需要几毫秒的处理才能弄清楚在$DEBUG>=3 && $OK="ok";
做什么。然而,执行起来可能并不比把它写出来快。
在未来的某个地方,一些糟糕的系统应用程序程序员(又名 sap)必须进入并维护代码。如果代码被写得很严密的神秘语句所困,那将是难以维护的。
1甚至别想写作$OK = "ok" if $DEBUG >= 3;
。这不是后置 if 语句的情况。