Perl 将SOAP响应存储为哈希
我试图将来自Perl(v5.12.4)SOAP调用(SQL查询)的响应存储为哈希,以便在维护数据结构的同时进行进一步处理。列会有所不同,因此我希望能够动态构建列键。以下是答复的一个例子:Perl 将SOAP响应存储为哈希,perl,soap,hash,Perl,Soap,Hash,我试图将来自Perl(v5.12.4)SOAP调用(SQL查询)的响应存储为哈希,以便在维护数据结构的同时进行进一步处理。列会有所不同,因此我希望能够动态构建列键。以下是答复的一个例子: $VAR1 = { 'row' => [ #0 { 'column1' => '', 'column2' => 'f',
$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,但没有找到和示例(除非我错过了)。在使用上面提供的代码时,我仍然会得到“不是散列引用…”回答。我可能遗漏了一些东西,我会继续检查和阅读你建议的材料。