我正在使用Perl进行一些API查询,并使用Data :: Dumper打印内容,并希望将多个键分配为变量。
$client->request( "GET", "interfaces/detail", $opts );
my $out = decode_json $client->responseContent();
print Dumper $out;
但是,我无法打印特定键(b4)输出或将其定义为变量。
print $out{'b4'};
我认为这是由于HASH / ARRAY / HASH / HASH / Key => JSON格式的值的嵌套数据结构。
DB<1> x $out
0 HASH(0x493f290)
'data' => ARRAY(0x494e2e0)
0 HASH(0x4475160)
'a1' => '11'
'a2' => '12'
'a3' => '13'
'a4' => HASH(0x494e560)
'b1' => '21'
'b2' => 22
'b3' => '23'
'b4' => '24'
'b5' => '25'
'b6' => '26'
'b7' => '27'
'a5' => '14'
我如何获得价值&#34; 24&#34;从引用的布局?
答案 0 :(得分:2)
$out
不是哈希,它是哈希引用。如果您不确定Perl中的引用,请阅读Perl Reference Tutorial。使用->
取消引用引用。而不是$out{key}
,而是$out->{key}
。
在您的特定情况下,您对列表的哈希引用具有另一个哈希的哈希。 Perl Data Structures Cookbook涵盖了处理这些问题。由于b4
是多个图层,因此您需要指定每个图层。 $out->{data}[0]{a4}{b4}
。
$out{key}
正在访问哈希%out
。 sigil(即。$
,@
和%
)根据变量的使用方式而变化,但$out{key}
仍为%out
。
由于$out{key}
访问其他变量,因此您应该收到类似Global symbol "%out" requires explicit package name
的错误。不幸的是,默认情况下,Perl不会执行此操作,您必须使用use strict
启用它。这应该是程序顶部的第一件事。 You should really, really, really use strict and warnings。它会遇到许多像这样令人沮丧的错误。