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 に答える