相关疑难解决方法(0)

如何验证Perl中的数组(列表)中是否存在值?

我有一个可能的值列表:

@a = qw(foo bar baz);
Run Code Online (Sandbox Code Playgroud)

如何以简明的方式检查值$val是否存在@a

一个明显的实现是遍历列表,但我确信TMTOWTDI.


感谢所有回答的人!我想强调的三个答案是:

  1. 接受的答案 - 最"内置"和向后兼容的方式.

  2. RET的答案是最干净的,但只适用于Perl 5.10及更高版本.

  3. draegtun的答案(可能)有点快,但需要使用额外的模块.我不喜欢添加依赖项,如果我可以避免它们,在这种情况下不需要性能差异,但如果你有一个1,000,000元素的列表,你可能想尝试这个答案.

arrays perl list find

20
推荐指数
6
解决办法
4万
查看次数

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

是否存在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能够更干净地处理这个问题.

arrays perl

4
推荐指数
2
解决办法
392
查看次数

在Perl 5.12.1上正常工作的代码在5.10.0上不起作用

我写了一些代码(大约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)

perl

4
推荐指数
1
解决办法
290
查看次数

标签 统计

perl ×3

arrays ×2

find ×1

list ×1