首页 文章

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

提问于
浏览
0

我正在使用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 回答

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

相关问题