这个 perl 表达式是什么"$DEBUG>=3 && DEBUG(" OK=$ok ");" ?



这个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值也必须为trueTrue意味着它不是

  • 不设防
  • 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语句,情况并非如此。

最新更新