2011-05-06 44 views

回答

4

這裏短路的含義是評估將在布爾結果建立後立即停止。

perl -E "@x=qw/a b c d/; for (qw/b w/) { say qq($_ -), $_ ~~ @x ? q(ja) : q(nein) }" 

對於輸入b,Perl將不看下面的@xb的元素。另一方面,您引用的文檔內置的grep將處理整個列表,即使所需的所有內容都可能是布爾值。

perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ -), scalar grep $_, @x ? q(ja) : q(nein) }" 
4

是的,在這個意義上,當一個參數是一個數組或哈希,~~將只檢查元素,直到可以肯定的結果的。

例如,在sub x { ... }; my %h; ...; %h ~~ \&x中,智能匹配只有在x%h的所有密鑰返回true時才返回true;如果一個調用返回false,則匹配可以立即返回false而不檢查其餘的鍵。這與&&運營商類似。

另一方面,在/foo/ ~~ %h中,如果智能匹配只找到與正則表達式匹配的一個鍵,則返回true;這與||類似。