此Perl代码是一段代码开头的变量声明的一部分。这是什么意思?
my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);
答案 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(并忽略最右边的值)。否则它将返回最右边的值。所以:
答案 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