Python内置函数'all'和'any'的Perl挂件`

Python内置函数'all'和'any'的Perl挂件`,python,perl,perl-data-structures,Python,Perl,Perl Data Structures,是否有像Python函数一样工作的Perl函数all或any?这两个功能是如何工作的 我想确定(无循环)是否所有错误消息都已定义,并且在以下结构中为ne“”: $VAR1 = [{ 'row' => [{ err_msg => "msg1", a => "a1", b => "b1" }, { err_msg => "msg2", a => "a2", b =>

是否有像Python函数一样工作的Perl函数
all
any
?这两个功能是如何工作的

我想确定(无循环)是否所有错误消息都已定义,并且在以下结构中为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"
    }]
}]

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

use List::Util qw( all );

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


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

所有{$\u->{err\u msg}
也认为
0
是无效值。根据需要进行调整。不幸的是,第一个版本总是返回
true
,即使对于不存在的键也是如此。但是第二个版本非常好:)
所有{length$\u->{err\u msg}
对于0都是真的,但不是空字符串或unde。但请注意,在Perl 5.12之前,它将在undef上发出警告。@Chris您看到了什么输入?(你所说的“不存在的密钥”是什么意思?)它在我的测试中起作用。@Chris。第一个版本很好用。例如,如果我注释掉数据结构中的第一行
err\u msg
,它将返回false。
use List::Util qw( all );

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