0

我正在编写一个 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,然后打印它们;但它会打印一长串仅提取的最后一行的列表。

提前感谢所有帮助我的人。

4

1 回答 1

4

对于 while 循环的每次迭代,您%row都是相同的变量。您只将对它的引用存储在 中@rowses,这意味着如果您更改%row,所有引用都指向更改后的哈希。您应该为循环的每次迭代定义一个新%row的,例如使用

my %row;

不死

%row = ();

为什么不打印 $LOL:如果第一个参数p是哈希引用,则将其解释为<p>.

于 2012-08-23T13:25:24.640 回答