我有哈希哈希值,如果同一个子哈希值与字符串匹配,我需要访问一个值。
这是我尝试访问的哈希的一部分:
{
'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") {
###
}
由于
答案 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}