3

perlsynのスマートマッチングの詳細セクションから:

スマートマッチオペレータは、可能な限り短絡します。

短絡演算子(、、など)~~との共通点はありますか?&&||

4

2 に答える 2

4

はい、引数の1つが配列またはハッシュである場合~~、結果が確実になるまで要素のみをチェックするという意味で。

たとえば、sub x { ... }; my %h; ...; %h ~~ \&xでは、スマート マッチは のxすべてのキーに対して true を返す場合にのみ true を返します%h。1 つの呼び出しが false を返す場合、残りのキーをチェックせずに、一致がすぐに false を返す可能性があります。これは&&演算子に似ています。

一方、 では/foo/ ~~ %h、正規表現に一致するキーが 1 つだけ見つかった場合、スマート マッチは true を返すことができます。これは に似てい||ます。

于 2011-05-06T10:08:07.197 に答える
4

ここでの短絡の意味は、ブール値の結果が確立されるとすぐに評価が停止することです。

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

入力の場合、Perl はin にb続く要素を調べません。一方、引用するドキュメントが参照するビルトインは、必要なのはブール値だけかもしれませんが、リスト全体を処理します。b@xgrep

perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ - ), scalar grep $_, @x ? q(ja) : q(nein) }"
于 2011-05-06T10:02:45.557 に答える