是否存在Perl习惯用法,用于在符合特定条件的数组中查找项目(如果有)?
my $match = 0;
foreach(@list){
if (match_test($_)){
$result = $_;
$match = 1;
last;
}
}
$match || die("No match.");
say $result, " is a match.";
Run Code Online (Sandbox Code Playgroud)
这个例子看起来有点尴尬.我希望Perl能够更干净地处理这个问题.
Eri*_*rom 14
是的,grep就是你要找的:
my @results = grep {match_test($_)} @list;
Run Code Online (Sandbox Code Playgroud)
grep返回@listwhere match_test返回true 的子集. 在大多数其他函数语言中grep调用filter.
如果你只是想在第一场比赛中,使用first从列表::的Util.
use List::Util qw/first/;
if (my $result = first {match_test($_)} @list) {
# use $result for something
} else {
die "no match\n";
}
Run Code Online (Sandbox Code Playgroud)
如果可能有多个匹配:
my @matches = grep { match_test($_) } @list;
Run Code Online (Sandbox Code Playgroud)
如果只能有一个匹配,则List :: Util的'first'更快(假设找到匹配):
use List::Util 'first';
if (my $match = first { match_test($_)} @list)
{
# do something with the match...
}
Run Code Online (Sandbox Code Playgroud)