Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 将SOAP响应存储为哈希_Perl_Soap_Hash - Fatal编程技术网

Perl 将SOAP响应存储为哈希

Perl 将SOAP响应存储为哈希,perl,soap,hash,Perl,Soap,Hash,我试图将来自Perl(v5.12.4)SOAP调用(SQL查询)的响应存储为哈希,以便在维护数据结构的同时进行进一步处理。列会有所不同,因此我希望能够动态构建列键。以下是答复的一个例子: $VAR1 = { 'row' => [ #0 { 'column1' => '', 'column2' => 'f',

我试图将来自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行中找到了一个偶数大小的列表的引用…”。任何一点在正确的方向,这里是非常感谢

谢谢

这:

$res->paramsall() 
几乎肯定会返回一个hashref

因此,您要做的是将hashref分配给%reply的第一个键

my %reply = %{ $res->paramsall() };
可能会有用

您应该了解一些使用引用结构的方法

使用我的%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}

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

嗨,约翰,这很有效,谢谢!我在尝试访问散列中的键/值时遇到一些问题。我正在使用:foreach my$key1(keys%reply){foreach my$key2(keys%{$reply{$key1}}}{print“$key2:”.$reply{$key2}->{$key2}.\n”;}}但是我得到了“script.pl行没有哈希引用…”关于解析哈希的任何建议?谢谢嗯,我找到了一种获取信息的方法,但我认为这不是最优雅的解决方案……但它是有效的:我的$count=0;直到($reply{'row'}[$count]eq unde){my%newHash=%{$reply{'row'}[$count]};而(my($key,$value)=每个%newHash){print“$key=$value\n”;}$count++;如果有人建议改进我的解决方案,我洗耳恭听。谢谢!再次感谢John。我肯定会通读perlreftut,也会通读perldoc perldsc,但没有找到和示例(除非我错过了)。在使用上面提供的代码时,我仍然会得到“不是散列引用…”回答。我可能遗漏了一些东西,我会继续检查和阅读你建议的材料。