我有一个散列哈希,我需要访问一个值,如果相同的子哈希值匹配字符串.
这是我试图访问的哈希的一部分:
{
'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)
谢谢
我们来看看括号:
{ { [ {
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)