0

我编写了以下例程,遍历哈希 0 - 7 并打印出每个中特定键的值。我需要在每个哈希中获取 'b4' 的值。

我想取消(0..7),当有不同数量的哈希时,使用更智能的东西。例如,有时只有 2 个,或者可能有 160 个。

my $out = decode_json $client->responseContent();

#print "\nOutput is :\n\n" . Dumper $out;
for my $slice (0..7) {
    my $out = $out->{data}[$slice]{b4};
    print " $out \n";
}

数据结构如下:

  DB<1> x $out
0  HASH(0x125fb5e0)
   'data' => ARRAY(0x1260d760)
      0  HASH(0x121765d0)
            'b1' => '21'
            'b2' => '22'
            'b3' => '23'
            'b4' => '24'
            'b5' => '25'
            'b6' => '26'
            'b7' => '27'
      1  HASH(0x125fb650)
            'b1' => '21'
            'b2' => '22'
            'b3' => '23'
            'b4' => '24'
            'b5' => '25'
            'b6' => '26'
            'b7' => '27'
      2  HASH(0x1236b960)
            'b1' => '21'
            'b2' => '22'
            'b3' => '23'
            'b4' => '24'
            'b5' => '25'
            'b6' => '26'
            'b7' => '27'
      3  HASH(0x12177030)
            'b1' => '21'
            'b2' => '22'
            'b3' => '23'
            'b4' => '24'
            'b5' => '25'
            'b6' => '26'
            'b7' => '27'
      4  HASH(0x1260da00)
            'b1' => '21'
            'b2' => '22'
            'b3' => '23'
            'b4' => '24'
            'b5' => '25'
            'b6' => '26'
            'b7' => '27'
4

2 回答 2

3

$out是对单元素哈希的引用,该哈希具有其data元素值的数组引用

最好将引用提取到单独的变量中,以便您可以更简单地访问内容。假设你写

my $data = $out->{data};

此后,该数组可访问为@$data,它包含的元素数为scalar @$data,索引为0 .. $#$data$data->[0]您可以使用等访问数组的每个元素$data->[1]

你的代码会变成

my $out  = decode_json $client->responseContent;
my $data = $out->{data};

for my $i ( 0 .. $#$data ) {
    my $item = $data->[$i];
    my $b4 = $item->{b4};
    print "$b4\n";
}

但请注意,除非您需要将数组索引用于其他目的,否则您最好迭代数组元素本身而不是其索引。这段代码会做同样的事情

my $out  = decode_json $client->responseContent;
my $data = $out->{data};

for my $item ( @$data ) {
    my $b4 = $item->{b4};
    print "$b4\n";
}

甚至只是

print "$_->{b4}\n" for @$data;

如果您不需要在循环中做任何其他事情

于 2016-03-01T22:07:51.987 回答
0

这是遍历数组的方法

for my $cur (@{$out->{data}})
{
    ...
}
于 2016-03-01T21:58:34.110 回答