這段Perl代碼是一段代碼開頭的變量聲明的一部分。這是什麼意思?這行代碼試圖做什麼?
my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);
這段Perl代碼是一段代碼開頭的變量聲明的一部分。這是什麼意思?這行代碼試圖做什麼?
my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);
它是等效於這樣的:
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
部分使用了||的事實。運算符返回第一個值爲true的值,如果$ store {year}爲「false」(零,空字符串等),則允許使用$ current_year
難道不應該是'如果($ ALL_PAGES!= 0 )'? – 2012-02-16 02:17:37
其實我第一次寫的時候誤讀了。這是一個通用的標量真實性測試,所以你的筆記比我的筆記更準確,但不像我現在所做的那樣正確。 – kbenson 2012-02-16 02:21:01
我會進一步補充說,這個代碼(和幾乎所有基於if的解決方案不會創建一堆臨時變量)將多次評估參數,而三元條件只會評估一次。如果'$ store {year} $'被一些函數調用所替代,這可能很慢或者可能會打印到控制檯或者可能會改變全局狀態,這將非常重要。 – 2012-02-16 02:42:07
我不是一個Perl的開發者,但我99%肯定(這適用於大多數其他語言),它等於:如果變量$ALL_PAGES
爲真(或1),然後是0評估,如果不是,評估($store{year} || $current_year)
。
我知道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
我認爲是做的一種方式的if/then/else語句 在這裏看到:http://www.tutorialspoint.com/perl/perl_conditions.htm
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)
上的:
任一側上的值將被返回的值,這取決於條件的返回值。如果條件評估爲真,則返回最左邊的值,否則返回最右邊的值。最左邊的值僅爲零0
。
$store{year} || $current_year
最右邊的值是一個表達式本身,使用C風格的邏輯OR運算符。它將返回最左邊的值,如果它評估爲真(並忽略最右邊的值)。否則,它會返回最右邊的值。所以:
http://perldoc.perl.org/perlop.html#Conditional-Operator – toolic 2012-02-16 02:36:53