我不明白爲什麼以下:爲什麼Perl短路評估導致檢查右值?
my $err = undef;
while(1){
if($err && ($err->code == 502)) {
[...]
}
[...]
eval {...}
$err = [email protected];
}
導致Can't call method "code" on an undefined value at ./filename.pl line 74.
在Perl v5.8.8。換句話說:爲什麼perl執行第二個布爾表達式,即使OP1 && OP2
構造不能由於第一個操作數爲false(undef)而變爲true。
即使更詳細的版本if((defined $err) && ($err->code == 502))
也會產生相同的結果。
感謝提前:)
我無法重現(確切地說,在5.10上)。你能給出一個小而完整的程序來證明問題嗎? – ruakh 2012-04-01 20:58:37
我的評論包含一個完整的Perl腳本。我不知道如何在此評論專欄中閱讀這篇文章,所以讓我把它作爲下面的答案張貼。 – thb 2012-04-01 21:07:16
對不起,但該程序使用Net :: Twitter(相當多deos),並使用縮減代碼片段時,它確實做正確的事情...請耐心等待,我會嘗試找到一個示例 – Julian 2012-04-01 21:09:24