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

时间:2013-12-27 21:55:25

标签: perl hash

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

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

{
  '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") {
    ###
    }

由于

2 个答案:

答案 0 :(得分:9)

让我们看看括号:

{ { [ {

你有一个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') {
      ...
   }       
}

答案 1 :(得分:3)

ENTRY指向一个数组。所以你需要包含索引(例如,获取第一个元素):

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

这是一种简短的写作方式

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