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

时间:2013-07-04 09:49:44

标签: perl

这是什么perl表达式“”?

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

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

4 个答案:

答案 0 :(得分:5)

与以下内容相同:

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

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

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

说明:

Sentence1 && Sentence2

仅当Sentence2为真时才会执行

Sentence1。和&&运算符是一个逻辑AND,所以如果第一个句子是假的,那么完整的操作将是假的(没有必要来评估第二个句子)

答案 1 :(得分:1)

$ DEBUG必须为3或更高且return的{​​{1}}值也必须为sub DEBUGtrue表示不是

  • 是undef
  • 0
  • “”
  • “0”
  • 将转换重载为布尔值以使其返回false的任何祝福对象
  • 清空数组和空哈希

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

return

答案 2 :(得分:1)

引用perlop

  

C风格的逻辑和

     

Binary“&&”执行短路逻辑AND操作。那是,   如果左操作数为假,则甚至不评估右操作数。   标量或列表上下文传播到右操作数(如果是)   评价。

答案 3 :(得分: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语句的情况。