答案 0 :(得分:4)
这里短路的意思是,一旦布尔结果建立,评估就会停止。
perl -E "@x=qw/a b c d/; for (qw/b w/) { say qq($_ - ), $_ ~~ @x ? q(ja) : q(nein) }"
对于输入b
,Perl不会查看b
中@x
后面的元素。另一方面,引用的文档所引用的grep
内置函数将处理整个列表,即使所需的所有内容都可能是布尔值。
perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ - ), scalar grep $_, @x ? q(ja) : q(nein) }"
答案 1 :(得分:4)
是的,从某种意义上说,当其中一个参数是数组或哈希时,~~
只会检查元素,直到它能确定结果为止。
例如,在sub x { ... }; my %h; ...; %h ~~ \&x
中,仅当x
为%h
的所有键返回true时,智能匹配才返回true;如果一个调用返回false,则匹配可以立即返回false而不检查其余的键。这类似于&&
运算符。
另一方面,在/foo/ ~~ %h
中,如果只找到一个与正则表达式匹配的键,则智能匹配可以返回true;这类似于||
。