从嵌套的 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。它会发现许多像这样令人沮丧的错误。