繁体   English   中英

Perl,帮助访问哈希值中的值

[英]Perl, Help accessing value in hash of hashes

我有一个哈希散列,如果相同子散列的值与字符串匹配,则需要访问一个值。

这是我尝试访问的哈希的一部分:

{
  'ACCOUNTINFO' => {
                   'ENTRY' => [
                              {
                                'Name' => 'fields_12'
                              },
                              {
                                'Name' => 'fields_24'
                              },
                              {
                                'content' => 'Piso 12',
                                'Name' => 'TAG'
                              },
                              {
                                'Name' => 'fields_23'
                              },
                              ]
                   }
}

如果Name是“ Tag”,则需要“ content”的值。

我可以访问名称:

$name = $refia->{ACCOUNTINFO}{ENTRY}{Name};

但在需要时我找不到任何访问内容的方法。

我已经明白了这一点:

if ($refia->{ACCOUNTINFO}{ENTRY}{Name} eq "TAG") {
    ###
    }

谢谢

让我们看一下括号:

{ { [ {

您有一个HoHoAoH。 您需要使用相同的括号来取消引用它:

$refia->{...}{...}[...]{...}

或更具体地说,

$refia->{ACCOUNTINFO}{ENTRY}[$i]{Name};

但是你不知道$i 实际上,您想为$i尝试许多不同的值,因此需要一个循环。

for my $i (0 .. $#{ $refia->{ACCOUNTINFO}{ENTRY} }) {
   if ($refia->{ACCOUNTINFO}{ENTRY}[$i]{Name} eq 'TAG') {
      ...
   }       
}

但这很难遵循。 更好的解决方案是将焦点缩小到结构的相关部分。

my $entries = $refia->{ACCOUNTINFO}{ENTRY};
for my $entry (@$entries) {
   if ($entry->{Name} eq 'TAG') {
      ...
   }       
}

ENTRY指向一个数组。 因此,您需要包括索引(例如,获取第一个元素):

$refia->{ACCOUNTINFO}{ENTRY}[0]{Name}

这是一种简短的写作方式

$refia->{ACCOUNTINFO}->{ENTRY}->[0]->{Name}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM