将SOAP响应存储为哈希

时间:2012-04-10 14:57:05

标签: perl soap hash

我正在尝试将来自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行中预期的偶数大小的列表......”。这里正确方向的任何一点都非常感激。

由于

1 个答案:

答案 0 :(得分:3)

这:

$res->paramsall() 

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

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

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

可能会奏效。

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

使用我的%hash =%{}取消引用哈希值会生成引用哈希值的副本 您可以直接使用这样的hashref:

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}

因为所有内容都已被取消引用。