List::MoreUtilsany
には、と同様の構文を使用する関数が呼び出されますgrep
が、基準が最初に満たされたときに内部ループが停止します。この動作の利点は、必要な反復がはるかに少なくなることです (交差点のランダムな分布を想定)。
の追加の利点は、any
コードの明快さです。それは、その機能にちなんで名付けられています。Perl のベスト プラクティスgrep
では、ブール コンテキストでの使用を推奨していませんgrep
。any
これはブール値のコンテキストで機能しますが、コードの意図は、ブール値の使用のために特別に設計された よりも読者にとって明確ではありません。
any
List::MoreUtils に依存関係を追加するのは事実です。ただし、List::MoreUtils は非常に遍在するモジュールの 1 つであり、既にインストールされている可能性が高いです。
次に例を示します。
use List::MoreUtils qw( any );
my %foo = ( foo => 1, bar => 1 );
my @cmp0 = qw( foo baz );
my @cmp1 = qw( baz blargh );
print "\@cmp0 and %foo have an intersection.\n"
if any { exists $foo{$_} } @cmp0;
print "\@cmp1 and %foo have an intersection.\n"
if any { exists $foo{$_} } @cmp1;
もう 1 つのオプションは、Perl 5.10.0 以降で使用可能になった~~
Smart Match Operatorです。次のように使用できます。
my %foo = ( foo => 1, bar => 1 );
my @cmp0 = qw( foo baz );
my @cmp1 = qw( baz blargh );
print "\@cmp0 and %foo have an intersection.\n" if @cmp0 ~~ %foo;
print "\@cmp1 and %foo have an intersection.\n" if @cmp1 ~~ %foo;
smartmatch を使用すると、最小限の Perl バージョンの依存関係を優先して、List::MoreUtils の依存関係を排除できます。コードが のように明確かどうかを判断するのはあなた次第ですany
。