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() 

几乎可以肯定会返回一个 hashref。

所以你正在做的是将 hashref 分配给 %reply 的第一个键。

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

可能会工作。

您应该查看perlreftut以了解一些使用参考结构的方法。

使用我的 %hash = %{ } 取消引用哈希会复制引用的哈希。
您可以像这样直接使用 hashrefs:

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 回答