Perl循环通过嵌套的祝福hashref元素

Dre*_*rek 1 perl loops hashref

我有一个类似于以下的perl数据结构:

$VAR1 = bless( {
                 'admin' => '0',
                 'groups_list' => [
                                           bless( {
                                                    'name' => undef,
                                                    'groupid' => 'canedit',
                                                    'description' => 'Can Edit Articles'
                                                  }, 'group_entry' ),
                                           bless( {
                                                    'name' => undef,
                                                    'groupid' => 'webuser',
                                                    'description' => 'Can Access Content'
                                                  }, 'group_entry' ),
                                         ],
                 'trusted' => '1',
               }, 'user_info' );
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来循环遍历'groups_list'中的所有组,并检查我们是否有'webuser'groupid.任何帮助表示赞赏.

另外,请告诉我是否可以在不使用循环的情况下完成此操作...例如搜索字符串'groupid'=>'webuser'.

Ole*_*kov 5

bless引用仅向其添加任意类型描述,并且不会以任何其他方式更改它,除非您使用overload,因此完全相同的循环与无法使用的引用将起作用:

foreach my $group (@{$VAR1->{groups_list}}) {
   if ($group->{groupid} eq 'webuser') {
      # do stuff and break out
   }
}
Run Code Online (Sandbox Code Playgroud)

grep如果你只需要内部哈希数据,而不需要数组中的索引,你也可以用loop替换:

my @webusers = grep { $_->{groupid} eq 'webuser' } @{$VAR1->{groups_list}};
Run Code Online (Sandbox Code Playgroud)

这将搜索整个列表.使用first从List::Util只找到一个匹配.