2011-11-03 66 views
2

我新的Perl和我写一个脚本来从数据库中抓取一些行:使用Perl的DBI,如何加入fetchrow_arrayref的结果?

my @rows = $conn->fetchrow_array(1,2,3); 

结果将是单列的三行。

12345 
56789 
12376 

我应该怎样加入他们一起12345,56789,56789

我试过,

my $list = join ",", @rows. 

结果:ARRAY(0x14f6de0),ARRAY(0x1508a90),ARRAY(0x15014c0)

通过foreach循环回去只是打印了新行的结果:

12345 
56789 
12376 

我在做什么错了?我有没有错误的概念fetchrow_array

+0

快速更新,我试着用foreach循环把它们推到一个new_array并在foreach循环外再次连接它们。这似乎工作。但我会有兴趣知道其他方式是有效的。谢谢 –

回答

6

每行都是对数组的引用(因为每行可以包含多列)。像下面的东西应该工作。

#!/usr/bin/perl 

use strict; use warnings; 

my @rows = (
    [ 12345 ], 
    [ 56789 ], 
    [ 12376 ], 
); 

my @vals = map @$_, @rows; 

print join(',', @vals), "\n"; 

但是,你正在使用selectcol_arrayref更好:

该工具方法结合“准备”,“执行”,并从所有行取一列,到一个单一的电话。它返回一个包含每行第一列值的数组的引用。

+0

我tred和它的作品太棒了!但很抱歉如此天真,我不明白它是如何工作的。推送和地图有什么区别? –

+1

使用'map @ $ _',您可以解除引用'@ rows'中的每个行引用,这会为'@ rows'的每个元素提供该行中包含的单个值。 –

+0

非常感谢!伟大的东西 –