我正在使用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'
如何从引用的布局中获取值“24”?
1 回答
$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 . 它将会遇到许多像这样令人沮丧的错误 .