如果有一个(Perl),在数组中找到符合特定条件的项目?

时间:2010-06-21 17:21:53

标签: arrays perl

是否有一个Perl习惯用法,用于在符合特定条件的数组中查找项目(如果有)?

my $match = 0;
foreach(@list){
   if (match_test($_)){
      $result = $_;
      $match = 1;
      last;
      }
   }
$match || die("No match.");
say $result, " is a match.";

这个例子看起来有点尴尬。我希望Perl能够更干净地处理这个问题。

2 个答案:

答案 0 :(得分:14)

是的,grep正是您所寻找的:

my @results = grep {match_test($_)} @list;

grep返回@list的子集,其中match_test返回true。在大多数其他函数式语言中,grep被称为filter

如果您只想要第一场比赛,请使用List::Util中的first

use List::Util qw/first/;

if (my $result = first {match_test($_)} @list) {
    # use $result for something
} else {
    die "no match\n";
}

答案 1 :(得分:6)

如果可能有多个匹配项:

 my @matches = grep { match_test($_) } @list;

如果只有一场比赛,List::Util的'第一'会更快(假设找到匹配):

 use List::Util 'first';
 if (my $match = first { match_test($_)} @list)
 {
      # do something with the match...
 }