我正在编写一个Perl脚本,但是我遇到了一个我无法真正克服的问题。下面是我的代码:
my @rowses = ();
while ( @list = $sth->fetchrow_array())
{
%row = ();
if($list[30] == 1)
%row = (
cod_cliente => $list[1],
rag_soc => $list[2],
p_iva => $list[11],
IDanagrafica => $list[0],
tabella => $tab,
IDanagraficaE => $list[0],
tabellaE => $tab,
checkbox => "checked",
);
$LOL = \%row;
print $cgi->p($LOL);
}
else
{
%row = (
cod_cliente => $list[1],
rag_soc => $list[2],
p_iva => $list[11],
IDanagrafica => $list[0],
tabella => $tab,
IDanagraficaE => $list[0],
tabellaE => $tab,
checkbox => "",
);
$LOL = \%row;
print $cgi->p($LOL);
}
push (@rowses, \%row);
}
$template->param(table => \@rowses);
$template->param(tab => $tab);当我尝试打印对行的引用($LOL)以进行调试时,它什么也不打印,而当我打印@rowses处的引用时,它是一个充满所有相同散列的数组,最后一个散列是从语句中获取的。
奇怪的是,如果我每次打印一个哈希行,而没有引用它,它会很好地打印它们,而且是所有的。
我这样做是为了将包含所有散列的数组引用传递给一个TMPL_LOOP,并打印它们;但它只打印一个很长的列表,其中只包含最后获取的行。
提前感谢每一个愿意帮助我的人。
发布于 2012-08-23 21:25:25
对于while循环的每次迭代,%row都是相同的变量。您只将对它的引用存储在@rowses中,这意味着如果您更改了%row,所有引用都指向更改后的散列。您应该为循环的每次迭代定义一个新的%row,例如,使用
my %row;索引,共
%row = ();为什么不打印$LOL :如果p的第一个参数是散列引用,它将被解释为<p>的属性。
https://stackoverflow.com/questions/12092417
复制相似问题