如何在perl脚本中正确使用fetchrow_arrayref?

时间:2013-10-07 06:21:24

标签: perl dbi

我在Perl脚本中使用了'fetchrow_arrayref'。任何人都可以指出我在脚本中出错的地方吗?无论你能告诉我什么,我都会感激不尽。谢谢。

我面临的问题是:

(1)print $ id; < -this不会打印$ id的内容。

(2)打印“$ list [1]”; < -this打印ARRAY(0x8da6978)而不是实际内容。

(3)反向(@list); < -this不会反转@list的内容。

(4)打印“@ {$ _} \ n”; < - “\ n”不起作用。另外我们为什么需要@ {}?

(5)打印“\ n”; < -tt也不行。

(6)打印“@list”; < -this print ARRAY(0x8da6978)。

(7)打印翻车机(@inverse); < -prints很好,但数组的内容没有反转。

#!/usr/bin/perl

use strict;
use warnings;
use DBI;
use Data::Dumper;

....

my $dbh = DBI->connect($dbname, $dbuser, $dbpassword) || die "Error $DBI::errstr";
my $sth = $dbh->prepare("SELECT * FROM name WHERE id = 11");
$sth->execute;

my @list = ();

while(my $element = $sth->fetchrow_arrayref){

    push(@list, $element);

}


$sth->finish;
$dbh->disconnect;

my ($id, $name, $email, $telephone) = @list;

print "Content-Type: text/html; charset=UTF-8\n\n";

print $id;                                           (problem 1)

print "$list[1]";                                    (problem 2)

my @inverse = reverse(@list);                        (problem 3)

foreach (@inverse){

    print "@{$_} \n";                                (problem 4)

}

print "\n";                                          (problem 5)

print "@list";                                       (problem 6)

print Dumper(@inverse);                              (problem 7)

exit;

2 个答案:

答案 0 :(得分:2)

列表中的每个项目都是对包含数据库表格一行数据的数组的引用。

此:

my ($id, $name, $email, $telephone) = @list;

似乎正在尝试处理该表的一行。

您需要为 @list的每个成员而不是@list本身执行此操作。

for my $row (@list) {
    my ($id, $name, $email, $telephone) = @$row;
    print $id;
}

答案 1 :(得分:0)

$ sth-> fetchrow_arrayref将返回arrayref并将其推送到@list。现在@list数组在每个索引上都包含arrayref,引用也是一样的。 因此,您应该在@list中推送数组的值,如: 推(@list,@ $ element);