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

Your%rowは、while ループの反復ごとに同じ変数です。それへの参照だけを に保存し@rowsesます。つまり、 を変更する%rowと、すべての参照が変更されたハッシュを指します。%rowループの反復ごとに新しいを定義する必要があります。

my %row;

死んだ

%row = ();

$LOL が出力されない理由: への最初の引数pがハッシュ参照である場合、. の属性として解釈されます<p>

于 2012-08-23T13:25:24.640 に答える