CGI.pmを使用してテーブルを作成しようとしています。このテーブルには、データベースのクエリの結果が含まれます。配列finalには、クエリが実行されるレコード番号が含まれています。各レコードの結果は、別々の行にある必要があります。レコードに対する各クエリの結果は、行に列を形成する必要があります。私がここで見つけたいくつかのコードを使用して 、私は次のように書きました(これは彼がそれを行うための最良の方法ではないかもしれません):
#!/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を使用してテーブルを作成する他の方法はありますか?どんな助けでもいただければ幸いです。ありがとう!
編集:Sinanの提案を使用して、コードを次のように変更しました。
#!/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:私はSinanの答えを受け入れていますが、その間に私は独自のソリューションを開発しました(誰かが興味を持っている場合に備えて):
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 ] });
}