Perl:如何测试数组中的每个元素是否大于某个值?

时间:2014-03-05 19:32:17

标签: arrays perl

我需要测试一个文件,每行具有相同的列数,每个条目都是一些值,我只想选择每个值大于0.5的那些行。

我知道我可以通过这样的方式遍历每行中的数组:

open (IN, shift @ARGV);
while (<IN>){
chomp;
my $count = 0;
my @array = split/\t/;

foreach (@array){
    if ($_ > 0.5) {
       $count ++;
    }
}

if ($count == scalar @array){
   print $_,"\n";
}
}
close IN;

这有点长,我想知道是否有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:6)

使用List::Util中的all - 它会检查传递的代码块(通常是条件)是否对列表的所有元素都返回true。

use List::Util qw(all);

if (all { $_ > 0.5 } @array) {
     print "Pass!"
}

它甚至会为你短路,一发现第一个假值就会终止,产生最快速的效果。

答案 1 :(得分:1)

my @array = 10 .. 20;

# compare size of array with list size of grep
if (@array == grep { $_ > 0.5 } @array) {

  print "All are greater than 0.5\n";
}