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

Bru*_*779 1 perl hash

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

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

{
  'ACCOUNTINFO' => {
                   'ENTRY' => [
                              {
                                'Name' => 'fields_12'
                              },
                              {
                                'Name' => 'fields_24'
                              },
                              {
                                'content' => 'Piso 12',
                                'Name' => 'TAG'
                              },
                              {
                                'Name' => 'fields_23'
                              },
                              ]
                   }
}
Run Code Online (Sandbox Code Playgroud)

如果Name是"Tag",我需要"content"的值.

我可以访问姓名:

$name = $refia->{ACCOUNTINFO}{ENTRY}{Name};
Run Code Online (Sandbox Code Playgroud)

但我找不到任何方式来在需要时访问内容.

我得到了这个:

if ($refia->{ACCOUNTINFO}{ENTRY}{Name} eq "TAG") {
    ###
    }
Run Code Online (Sandbox Code Playgroud)

谢谢

ike*_*ami 9

我们来看看括号:

{ { [ {
Run Code Online (Sandbox Code Playgroud)

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

$refia->{...}{...}[...]{...}
Run Code Online (Sandbox Code Playgroud)

或者更具体地说,

$refia->{ACCOUNTINFO}{ENTRY}[$i]{Name};
Run Code Online (Sandbox Code Playgroud)

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

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

但这有点难以理解.更好的解决方案是将重点缩小到结构的相关部分.

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