我有一个可能的值列表:
@a = qw(foo bar baz);
Run Code Online (Sandbox Code Playgroud)
如何以简明的方式检查值$val是否存在@a?
一个明显的实现是遍历列表,但我确信TMTOWTDI.
感谢所有回答的人!我想强调的三个答案是:
接受的答案 - 最"内置"和向后兼容的方式.
RET的答案是最干净的,但只适用于Perl 5.10及更高版本.
draegtun的答案(可能)有点快,但需要使用额外的模块.我不喜欢添加依赖项,如果我可以避免它们,在这种情况下不需要性能差异,但如果你有一个1,000,000元素的列表,你可能想尝试这个答案.
是否存在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能够更干净地处理这个问题.
我写了一些代码(大约100行),在5.12.1版本上工作正常.不幸的是我的客户端使用的是版本5.10.0.所以我测试了5.10.0上的代码,发现它不起作用!
我在哪里可以找到5.10和5.12之间的差异列表?
我认为"在哪里可以找到5.10和5.12之间的差异列表"问题的最佳答案是"已接受答案"下的" plusplus "评论.有关下面代码的解释,请阅读Michael Carman的回答.
代码适用于5.12.1但不适用于5.10.0($contents运行代码后仍为空字符串)
# read in the first 10 lines.
my $contents = '';
for (my $i = 0; $i < 10 && ! eof; $i++) {
$contents .= <FILE>;
}
Run Code Online (Sandbox Code Playgroud)
适用于这两个版本的改进代码.
# read in the first 10 lines.
my $contents = '';
my $i = 0;
while (<FILE>) {
last if $i >= 10;
$contents .= $_;
$i++;
}
Run Code Online (Sandbox Code Playgroud)