1

我陷入了 Perl 脚本中“fetchrow_arrayref”的使用。谁能指出我在脚本中哪里出错了?我会很感激你能告诉我的。谢谢你。

我面临的问题是:

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

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

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

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

(5) 打印“\n”;<-这也不起作用。

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

(7) 打印 Dumper(@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;
4

2 回答 2

2

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

这个:

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

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

您需要为每个成员@list不是@list其自身执行此操作。

for my $row (@list) {
    my ($id, $name, $email, $telephone) = @$row;
    print $id;
}
于 2013-10-07T06:24:06.507 回答
0

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

于 2017-06-13T11:32:27.910 回答