2

データの構造を維持しながら、さらに処理するために、Perl (v5.12.4) SOAP 呼び出し (SQL クエリ) からの応答をハッシュとして保存しようとしています。列はさまざまなので、列キーを動的に作成できるようにしたいと考えています。返信の例を次に示します。

$VAR1 = {
      'row' => [
               #0
               {
                 'column1' => '',
                 'column2' => 'f',
                 'column3' => '0',
                 'column4' => '',
                 'column5' => 'f',
                 'column6' => '0',
                 'column7' => 'f',
               },
            ]
       };

列の名前と値に興味があります。これを処理するために、次のような(コミカルな)試みをいくつか行いました。

unless ($res->fault) {
  $Data::Dumper::Indent = 3;
  my (%reply) = $res->paramsall();
  foreach my $keys (keys %reply) {
    print "$keys\n";
  }
}

これにより、「script.pl行で偶数サイズのリストが期待される場所で参照が見つかりました...」が表示されます。ここでの正しい方向へのポイントは大歓迎です。

ありがとう

4

1 に答える 1

3

これ :

$res->paramsall() 

ほぼ確実にハッシュリファレンスを返します。

つまり、ハッシュリファレンスを %reply の 1 番目のキーに割り当てます。

my %reply = %{ $res->paramsall() };

おそらく動作します。

参照構造を操作するいくつかのメソッドについては、perlreftutを参照してください。

%hash = %{ } でハッシュを逆参照すると、参照されたハッシュのコピーが作成されます。
次のように、ハッシュリファレンスを直接操作できます。

my $reply = $res->paramsall(); 

foreach my $key1 (keys %$reply) { 
  foreach my $key2 (keys %{ $reply->{$key1} }) { 
    print " $key2: " . $reply->{$key1}{$key2} . "\n"; 
  } 
}

返信の最初のコード例では、これは次のとおりです。

$reply{$key2}->{$key2}

読む必要があります:

$reply{$key1}{$key2}

すべてがすでに逆参照されているためです。

于 2012-04-10T15:22:58.033 に答える