是否存在Perl习惯用法,用于在符合特定条件的数组中查找项目(如果有)?
my $match = 0; foreach(@list){ if (match_test($_)){ $result = $_; $match = 1; last; } } $match || die("No match."); say $result," is a match.";
这个例子看起来有点尴尬.我希望Perl能够更干净地处理这个问题.
@R_301_323@
是的,grep是您正在寻找的:
my @results = grep {match_test($_)} @list;
grep返回@list的子集,其中match_test返回true. grep在大多数其他函数语言中称为过滤器.
如果您只想要第一场比赛,请先使用List::Util.
use List::Util qw/first/; if (my $result = first {match_test($_)} @list) { # use $result for something } else { die "no match\n"; }