从嵌套的 hash/array 数据结构中获取值
Obtaining a value from a nested hash/array data structure
我正在使用 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=>Value 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”?
$out
不是散列,而是散列引用。如果您不确定 Perl 中的引用,请阅读 Perl Reference Tutorial。使用 ->
解除引用。而不是 $out{key}
而是 $out->{key}
.
在你的特定情况下,你有一个哈希引用列表到一个哈希和另一个哈希。 Perl Data Structures Cookbook 中介绍了如何处理这些问题。由于b4
下了好几层,所以每一层都需要指定。 $out->{data}[0]{a4}{b4}
.
$out{key}
正在访问哈希 %out
。印记(即 $
、@
和 %
)根据变量的使用方式而变化,但 $out{key}
仍然是 %out
.
因为 $out{key}
访问了一个不同的变量,你应该得到像 Global symbol "%out" requires explicit package name
这样的错误。不幸的是,默认情况下 Perl 不这样做,您必须使用 use strict
打开它。这应该是程序顶部的第一件事。 You should really, really, really use strict and warnings。它会发现许多像这样令人沮丧的错误。
我正在使用 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=>Value 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”?
$out
不是散列,而是散列引用。如果您不确定 Perl 中的引用,请阅读 Perl Reference Tutorial。使用 ->
解除引用。而不是 $out{key}
而是 $out->{key}
.
在你的特定情况下,你有一个哈希引用列表到一个哈希和另一个哈希。 Perl Data Structures Cookbook 中介绍了如何处理这些问题。由于b4
下了好几层,所以每一层都需要指定。 $out->{data}[0]{a4}{b4}
.
$out{key}
正在访问哈希 %out
。印记(即 $
、@
和 %
)根据变量的使用方式而变化,但 $out{key}
仍然是 %out
.
因为 $out{key}
访问了一个不同的变量,你应该得到像 Global symbol "%out" requires explicit package name
这样的错误。不幸的是,默认情况下 Perl 不这样做,您必须使用 use strict
打开它。这应该是程序顶部的第一件事。 You should really, really, really use strict and warnings。它会发现许多像这样令人沮丧的错误。