0

这个 perl 表达式“”是什么?

$DEBUG>=3 && DEBUG("OK=$ok");

让我如此困惑的主要是布尔操作“&&”。任何人都可以为我解释一下吗?谢谢。

4

4 回答 4

5

它与以下内容相同:

if( $DEBUG >= 3 ) {
   DEBUG("OK=$ok");
}

或者

DEBUG("OK=$ok") if $DEBUG >= 3;

我个人更喜欢这个(它对我来说更具可读性)

解释:

Sentence1 && Sentence2

Sentence2Sentence1只有当为真时才会执行。&& 运算符是逻辑与,因此如果第一句为假,则完整的操作将为假(无需评估第二句)

于 2013-07-04T09:52:49.137 回答
1

$DEBUG 必须等于或大于 3,并且return来自 的值也sub DEBUG必须如此trueTrue意味着,它不是

  • 未定义
  • 0
  • “”
  • “0”
  • 任何重载转换为布尔值以返回 false 的祝福对象
  • 空数组和空哈希

带有 subs 的布尔部分也将被执行。因此,如果您的表达式在if子句中,则该return值将是该表达式的一部分。例如。

sub test {
    return 1;
}

if ( $abc >2 && test() ) {
    ...
}
于 2013-07-04T09:52:35.450 回答
1

引用perlop

C 风格的逻辑与

二进制“&&”执行短路逻辑与运算。也就是说,如果左操作数为假,则甚至不计算右操作数。如果计算,标量或列表上下文会向下传播到正确的操作数。

于 2013-07-04T09:55:28.493 回答
0

&&一个运算符。然而,与 一样C,Perl 使用逻辑快捷方式。如果左边是假的,你就知道整个陈述是假的,所以你不必测试右边。但是,如果左侧为真,则必须测试右侧以确保整个语句为真。

因此,如果$DEBUG >= 3为真,则将执行右侧$OK = "ok"。它与以下内容相同:

if ( $DEBUG >= 3 ) {
    $OK = "ok";
}

而且,我会争辩说,最好像我一样把它写出来1。即使您知道&&逻辑语句中的内容,您的大脑也需要几毫秒的处理才能弄清楚在$DEBUG>=3 && $OK="ok";做什么。然而,执行起来可能并不比把它写出来快。

在未来的某个地方,一些糟糕的系统应用程序程序员(又名 sap)必须进入并维护代码。如果代码被写得很严密的神秘语句所困,那将是难以维护的。


1甚至别想写作$OK = "ok" if $DEBUG >= 3;。这不是后置 if 语句的情况。

于 2013-07-04T11:44:08.883 回答