2010-10-06 94 views
1

我必须模拟一个数组,就好像它是从Net :: DBI fetchall_arrayref函数返回的一样。Perl模拟Net :: DBI fetchall_arrayref()

可以说的是,SQL查询是一样的东西“选择数据1,数据2,数据3从表1”

我有一个XML文件作为

<type1> 
    <data1>a</data1> 
    <data2>b</data2> 
    <data3>c</data3> 
</type1> 
<type1> 
    <data1>da</data1> 
    <data2>db</data2> 
    <data3>dc</data3> 
</type1> 

我阅读使用XML这个XML文件: :简单获得像一个完整的数据数组:

$VAR1 = { 
      'type1' => [ 
        { 
         'data2' => 'b', 
         'data3' => 'c', 
         'data1' => 'a' 
        }, 
        { 
         'data2' => 'db', 
         'data3' => 'dc', 
         'data1' => 'da' 
        } 
        ] 
     }; 

我如何得到这个数组,这将是相同的,通过获取返回的一个形式all_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; 
} 

请帮助。

回答

2

fetchall_arrayref()返回对每行包含一个引用的数组的引用。您希望将散列引用中的每组值都转换为数组引用。这应该工作:

my $arr_ref; 
foreach my $hashref (@{$data->{'type1'}}) { 
    push @$arr_ref, [ sort values %$hashref ]; 
} 

这给了我下面的(通过数据::自卸车):

$VAR1 = [ 
      [ 
      'a', 
      'b', 
      'c' 
      ], 
      [ 
      'da', 
      'db', 
      'dc' 
      ] 
     ]; 

(旁白:请始终把你的程序use strict;