2013-10-07 2 views
1

Я застрял в использовании 'fetchrow_arrayref' в Perl-скрипте. Может ли кто-нибудь указать, где я ошибаюсь в сценарии? Буду признателен за то, что вы могли бы сообщить мне. Спасибо.Как правильно использовать fetchrow_arrayref в perl-скрипте?

Проблемы я сталкиваюсь являются:

(1) печать $ ID; < -Это не печатает содержимое $ id.

(2) print "$ list [1]"; <-это печатает ARRAY (0x8da6978) вместо фактического содержимого.

(3) обратный (@list); < -Это не отменяет содержимое @list.

(4) print "@ {$ _} \ n"; < - «\ n» не работает. Также зачем нам @ {}?

(5) print "\ n"; < -это не работает.

(6) print "@list"; < -это принт ARRAY (0x8da6978).

(7) print Dumper (@ инверсия); < -Программы отлично, но содержимое массива не отменено.

#!/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; 
+0

Вы должны понимать, что означает средство ..' $ list [1] 'prints' ARRAY (0x8da6978) ', который является ссылкой try' $ list -> [1] '. попытайтесь понять, как массировать смещение. – run

+0

, если вы предоставите значения самосвала, то любой может помочь вам в этом форуме. – run

+0

Значения самонаведения приведенного выше сценария: ARRAY (0x9e387a0) 11 Имя [email protected] 03-5725-8830 ARRAY (0x9e387a0) $ VAR1 = ['11', 'Name', '[email protected]', '03 -5725-8830 ']; print "/ n" вообще не работает. –

ответ

2

Каждый элемент в вашем списке будет ссылкой на массив, содержащий данные для одной строки таблицы базы данных.

Это:

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

, кажется, пытается обработать одну строку таблицы.

Вы должны сделать это для каждого члена@list, а не @list.

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

Благодарим вас за немедленный ответ. Я пробовал код, который вы предлагали, но он все равно ничего не печатает на экране ... –

+0

Опубликуйте свой скорректированный код – AKHolland

0

$ sth-> fetchrow_arrayref вернет arrayref и вы нажмете это на @list. Теперь массив @list содержит arrayref для каждого индекса, и ссылка будет одинаковой. Следовательно, вы должны нажать значение массива в @list как: push (@list, @ $ element);

Смежные вопросы