Perl模拟Net :: DBI fetchall_arrayref()

时间:2010-10-06 17:29:30

标签: xml perl dbi

我必须模拟一个数组,好像它是从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;
}

请帮忙。

1 个答案:

答案 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;放入您的计划中。)