Кулон Perl для встроенных функций Python `all` и` any` - PullRequest
0 голосов
/ 20 сентября 2018

Существуют ли функции Perl, которые работают как функции Python all или any? Этот ответ от Джобина является кратким объяснением того, как работают обе функции.

Я хочу определить (без цикла), являются ли все сообщения об ошибках 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 голосов
/ 20 сентября 2018

Невозможно выполнить проверку без зацикливания, но вы действительно можете использовать 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;

Первая версия более эффективна, посколькуон смотрит на группу только в том случае, если все предыдущие группы проверены нормально, тогда как вторая версия безусловно работает для каждой группы.Однако вряд ли эта разница имеет значение.

...