Я пытаюсь создать таблицу, используя CGI.pm. Таблица будет содержать результаты от запросов к базе данных. Окончание массива содержит номера записей, на которых выполняются запросы . Результаты для каждой записи должны быть в отдельной строке. Результат каждого запроса в записи должен содержать столбец в строке. Используя код, я нашел here, я написал следующее (который не может быть он лучший способ сделать это):Таблицы с использованием Perl CGI.pm
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use DBI;
...
my @rows;
my $rec;
foreach my $el (@final) {
@rows =();
foreach my $query (@queries) {
my $query_handle = $connxn->prepare($query);
$query_handle->execute($el);
$query_handle->bind_columns(undef, \$rec);
while($query_handle->fetch()) {
push(@rows,td($rec));
}
}
print $q->table({-border=>undef,-width=>'25%'},
Tr(\@rows)
);
}
Когда я запускаю это, я получаю пустую страницу и сообщение об ошибке «Не определено подпрограммой & main :: td " в журнале ошибок. Почему я получаю эту ошибку, и как я могу избавиться от нее? Есть ли какой-либо другой способ создать таблицу, в которой я хочу использовать CGI.pm? Любая помощь будет оценена по достоинству. Благодаря!
EDIT: Используя предложение Синана, я изменил свой код следующим образом:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Carp;
use HTML::Template;
...
my @rows;
my $rec;
foreach my $el (@final) {
foreach my $query (@queries) {
my $query_handle = $connxn->prepare($query);
$query_handle->execute($el);
$query_handle->bind_columns(undef, \$rec);
while($query_handle->fetch()) {
push(@rows, { CELLS => [ map { CELL => $_ }, $rec ] });
}
}
}
my $tmpl = HTML::Template->new(filehandle => \*DATA);
$tmpl->param(ROWS => \@rows);
print $tmpl->output;
__DATA__
<table>
<TMPL_LOOP ROWS>
<tr>
<TMPL_LOOP CELLS>
<td><TMPL_VAR CELL></td>
</TMPL_LOOP>
</tr>
</TMPL_LOOP>
</table>
Но теперь я получаю результат каждого запроса в отдельной строке, вместо того же самого (см оригинальный вопрос выше). Кажется, я не могу это исправить самостоятельно. Есть идеи?
EDIT2: Хотя я принимаю ответ Синан, тем временем я разработал свое собственное решение (в случае, если кому-то интересно):
my @rows;
my @rows1;
foreach my $el (@final) {
@rows =();
foreach my $query1 (@queries) {
my $query_handle = $connxn->prepare($query1);
$query_handle->execute($el);
$query_handle->bind_columns(undef, \$rec);
while($query_handle->fetch()) {
push(@rows, $rec);
}
}
push(@rows1, { CELLS => [ map { CELL => $_ }, @rows ] });
}
Я понимаю, что вы имеете в виду, но я не могу понять, как его использовать в моем случае. Должен ли я хранить результаты в некоторой структуре данных, которые я передаю этой функции?Пожалуйста помоги мне с этим. – user828647
Я не уверен, что вы видели мое обновление, но я думаю, что он отвечает на ваш вопрос. –
Я просто скопировал ваши команды, а первый дал мне ошибку «Недостаточно аргументов для карты, рядом»} @ ". Кроме того, говорит 'синтаксическая ошибка около"} @ '. Я не уверен, почему это происходит. – user828647