这行代码试图做什么?

时间:2012-02-16 02:08:01

标签: perl

此Perl代码是一段代码开头的变量声明的一部分。这是什么意思?

my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);

5 个答案:

答案 0 :(得分:4)

它等同于:

my $EXPLICIT_YEAR;
if ($ALL_PAGES) {
    $EXPLICIT_YEAR = 0;
}
else {
    # $EXPLICIT_YEAR = $store{year} || $current_year;
    if ($store{year}) {
        $EXPLICIT_YEAR = $store{year};
    }
    else {
        $EXPLICIT_YEAR = $current_year;
    }
}

$conditional ? $true : $false部分是三元组。 $store{year} || $current_year部分使用||的事实operator返回计算结果为true的第一个值,如果$ store {year}为“false”(零,空字符串等),则允许使用$ current_year

答案 1 :(得分:1)

my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);

此表达式使用Ternary "?:" operator,并使用|| C-style logical OR与子表达式结合使用。请参阅perldoc perlop

$ALL_PAGES ?

?之前的表达式 - 条件 - 被计算为布尔表达式。真值表示任何非零值,空字符串或未定义(未声明)。

0 : ( $store{year} || $current_year )

:两侧的值是要返回的值,具体取决于条件的返回值。如果条件的计算结果为true,则返回最左边的值,否则返回最右边的值。最左边的值只是零0

$store{year} || $current_year

最右边的值是表达式本身,使用C风格的逻辑OR运算符。它将返回最左边的值,如果它计算为true(并忽略最右边的值)。否则它将返回最右边的值。所以:

  • 如果$ ALL_PAGES为真,则将$ EXPLICIT_YEAR设置为零
  • 如果$ ALL_PAGES为false,则为:
  • 如果$ store {year}为true,则将$ EXPLICIT_YEAR设置为$ store {year}
  • 将$ EXPLICIT_YEAR设置为$ current_year

答案 2 :(得分:0)

我不是Perl开发人员,但我99%肯定(这在大多数其他语言中都适用)它等同于:如果变量$ALL_PAGES为真(或1),则0为0评估,如果没有,则评估($store{year} || $current_year)

答案 3 :(得分:0)

我知道0 perl但很多C,所以在这里猜测:

  Set variable EXPLICIT_YEAR to  
     (  if ALL_PAGES == true then 0  
        else ( (get store indexed at year) or current_year ))

或操作是

false or false = false  
false or true  = true
true  or false = true  
true  or true  = true  

答案 4 :(得分:0)

我认为这是一种做if / then / else的方法 见这里:http://www.tutorialspoint.com/perl/perl_conditions.htm