2010-10-06 104 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;