是否有一个Perl习惯用法,用于在符合特定条件的数组中查找项目(如果有)?
my $match = 0;
foreach(@list){
if (match_test($_)){
$result = $_;
$match = 1;
last;
}
}
$match || die("No match.");
say $result, " is a match.";
这个例子看起来有点尴尬。我希望Perl能够更干净地处理这个问题。
答案 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...
}