是否有像 Python 函数 allany 那样工作的 Perl 函数? This answer from Jobin is a short explanation 两个函数的工作方式。

我想确定(不带循环)是否所有的 error-msg 都是以下结构中的 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"
    }]
}]

最佳答案

不循环执行检查是不可能的,但您确实可以使用 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;

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

关于python - 用于 Python 内置函数 `all` 和 `any` 的 Perl 挂件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52432130/

10-10 17:51
查看更多