这个perl表达式"是什么?
$DEBUG>=3 && DEBUG("OK=$ok");
让我如此困惑的主要是布尔运算"&&"。有人能为我解释吗?谢谢
它与相同
if( $DEBUG >= 3 ) {
DEBUG("OK=$ok");
}
或
DEBUG("OK=$ok") if $DEBUG >= 3;
我个人更喜欢这个(它对我来说更可读)
解释:
Sentence1 && Sentence2
只有当Sentence1
为真时,才会执行Sentence2
。&;运算符是一个逻辑AND,所以如果第一句话为false,则完整的运算将为false(无需评估第二句话)
报价周期:
C型逻辑与
二进制"&&"执行短路逻辑AND运算。也就是说,如果左操作数为false,则甚至不会计算右操作数。标量或列表上下文向下传播到右侧操作数(如果是)评估。
$DEBUG必须为3或更大,并且sub DEBUG
中的return
值也必须为true
。True
意味着它不是
- 不设防
- 0
- "
- "0"
- 任何重载转换为布尔值以返回false的祝福对象
- 空数组和空散列
带有子的布尔部件也将执行。因此,如果表达式位于if
子句内,则return
值将是该表达式的一部分。例如
sub test {
return 1;
}
if ( $abc >2 && test() ) {
...
}
&&
是和运算符。然而,与C
一样,Perl使用逻辑快捷方式。如果左手边是假的,你就知道整个陈述是假的,所以你不必测试右手边。但是,如果左手边是真的,则必须测试右手边以确保整个语句是真的。
因此,如果$DEBUG >= 3
为真,则右侧的$OK = "ok"
将被执行。与相同
if ( $DEBUG >= 3 ) {
$OK = "ok";
}
而且,我认为,最好像我写1那样把它写得很长。即使你知道&&
在逻辑语句中做什么,你的大脑也需要几毫秒的处理才能弄清楚$DEBUG>=3 && $OK="ok";
在做什么。然而,执行起来可能并不比长期写出来快。
在未来的某个地方,一些糟糕的系统应用程序程序员(又名sap)不得不进入并维护代码。如果代码被写得密密麻麻的晦涩语句所困扰,那么维护起来将是一件困难的事情。
1甚至不要想写$OK = "ok" if $DEBUG >= 3;
。对于post-fixed-if语句,情况并非如此。