我必须模拟一个数组,好像它是从Net :: DBI fetchall_arrayref函数返回的。
让我们说SQL查询类似于“SELECT data1,data2,data3 from table1”
我有一个XML文件
<type1>
<data1>a</data1>
<data2>b</data2>
<data3>c</data3>
</type1>
<type1>
<data1>da</data1>
<data2>db</data2>
<data3>dc</data3>
</type1>
我使用XML :: Simple读取这个XML文件,以获得完整的数据数组,如:
$VAR1 = {
'type1' => [
{
'data2' => 'b',
'data3' => 'c',
'data1' => 'a'
},
{
'data2' => 'db',
'data3' => 'dc',
'data1' => 'da'
}
]
};
如何将此数组添加到与fetchall_array_ref返回的表单相同的表单中?
我正在做这样的事情:
#REad from testin.xml file
$data = $xml->XMLin('testin.xml');
@testdata = $data->{type1};
$i = 0;
foreach $e (@{$data->{type1}})
{
$simulate_data[$i++] = \$e;
}
请帮忙。
答案 0 :(得分:2)
fetchall_arrayref()
返回对每行包含一个引用的数组的引用。您希望将哈希引用中的每组值转换为数组引用。这应该有效:
my $arr_ref;
foreach my $hashref ( @{$data->{'type1'}} ) {
push @$arr_ref, [ sort values %$hashref ];
}
这给了我以下(通过Data :: Dumper):
$VAR1 = [
[
'a',
'b',
'c'
],
[
'da',
'db',
'dc'
]
];
(旁白:请始终将use strict;
放入您的计划中。)