从嵌套的散列/数组数据结构中获取值

时间:2016-02-29 21:21:59

标签: arrays perl hash data-dumper

我正在使用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;从引用的布局?

1 个答案:

答案 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。它会遇到许多像这样令人沮丧的错误。