Perl,帮助访问散列中的值
我有一个散列,如果同一个子散列的值与字符串匹配,我需要访问一个值 这是我试图访问的哈希的一部分:Perl,帮助访问散列中的值,perl,hash,Perl,Hash,我有一个散列,如果同一个子散列的值与字符串匹配,我需要访问一个值 这是我试图访问的哈希的一部分: { 'ACCOUNTINFO' => { 'ENTRY' => [ { 'Name' => 'fields_12' },
{
'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") {
###
}
谢谢,条目指向一个数组。因此,您需要包含索引(例如,获取第一个元素): 这是一个简短的写作方式
$refia->{ACCOUNTINFO}->{ENTRY}->[0]->{Name}
条目指向一个数组。因此,您需要包含索引(例如,获取第一个元素): 这是一个简短的写作方式
$refia->{ACCOUNTINFO}->{ENTRY}->[0]->{Name}
让我们看一下括号:
{ { [ {
你有个好主意。您将需要相同的括号来取消引用它:
$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') {
...
}
}
让我们看一下括号:
{ { [ {
你有个好主意。您将需要相同的括号来取消引用它:
$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') {
...
}
}
Perl只需要一个解引用,因为其后的每一级都必须是一个引用本身。任何一种形式都可以,但第一种形式较短。Perl只需要一个解引用,因为其后的每一级都必须是引用本身。这两种形式都可以,但第一种更短。我仍然无法获得“内容”的价值。我正在尝试你写的第一个语法。我写的点在哪里:$tag=$ref->{ACCOUNTINFO}{ENTRY}[$I]{content}。但是我什么也没得到,要么你的数据结构和你说的不一样,要么你没有正确地复制代码。(我看到你的ref在一个名为
$refia
的变量中,而我的ref在$ref
中。你解释了吗?我把答案改为使用$refia
)如果问题确实是$ref
与$refia
相比,那么你可能没有使用严格使用代码>。始终使用严格使用;使用警告代码>!问题实际上是vas ref与refia。我在脚本中使用了这两种方法。我不能在这里使用scrict。我正在修改一个不使用它的脚本,如果我使用strict,它将不起作用。我已经尝试过解决这个问题,但是我不能
,但也添加了我们的$foo代码>用于任何投诉。这将为您带来严格使用的一些好处代码>在新代码中,而不必当场修复旧代码。//或者,您可以使用使用strict编写新函数时,在新函数内部编写代码>。这是一个词汇范围的pragma,因此它只会影响您正在编写的代码。我仍然无法获得“content”的值。我正在尝试你写的第一个语法。我写的点在哪里:$tag=$ref->{ACCOUNTINFO}{ENTRY}[$I]{content}。但是我什么也没得到,要么你的数据结构和你说的不一样,要么你没有正确地复制代码。(我看到你的ref在一个名为$refia
的变量中,而我的ref在$ref
中。你解释了吗?我把答案改为使用$refia
)如果问题确实是$ref
与$refia
相比,那么你可能没有使用严格使用代码>。始终使用严格使用;使用警告代码>!问题实际上是vas ref与refia。我在脚本中使用了这两种方法。我不能在这里使用scrict。我正在修改一个不使用它的脚本,如果我使用strict,它将不起作用。我已经尝试过解决这个问题,但是我不能
,但也添加了我们的$foo代码>用于任何投诉。这将为您带来严格使用的一些好处代码>在新代码中,而不必当场修复旧代码。//或者,您可以使用使用strict编写新函数时,在新函数内部编写代码>。它是一个词汇范围的pragma,因此它只会影响您正在编写的代码。