用于Python内置函数all和any的Perl吊坠

时间:2018-09-20 19:37:46

标签: python perl perl-data-structures

是否有像Python函数allany一样工作的Perl函数? This answer from Jobin is a short explanation介绍两种功能的工作方式。

我要确定(无循环)以下结构中是否所有错误消息均为defined and ne ""

$VAR1 = [{
  'row' => [{
      err_msg => "msg1",
      a => "a1",
      b => "b1"
    },
    {
      err_msg => "msg2",
      a => "a2",
      b => "b2"
    }]
},
{
  'row' => [{
      err_msg => "msg3",
      a => "a3",
      b => "b3"
    },
    {
      err_msg => "msg4",
      a => "a4",
      b => "b4"
    }]
}]

1 个答案:

答案 0 :(得分:8)

不执行循环就不可能执行检查,但是您确实可以使用all来执行此操作。

use List::Util qw( all );

my $ok =
   all {
      all { $_->{err_msg} }
         @{ $_->{row} }
   }
      @$VAR1;

use List::Util qw( all );

my $ok =
   all { $_->{err_msg} }
      map { @{ $_->{row} } }
         @$VAR1;

第一个版本效率更高,因为它仅在所有先前的组都签出ok的情况下才查看一个组,而第二个版本无条件地对每个组有效。不过,这种差异不太重要。