我正在尝试将来自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行中预期的偶数大小的列表......”。这里正确方向的任何一点都非常感激。
由于
答案 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}
因为所有内容都已被取消引用。