Perl变量执行顺序

时间:2017-01-26 11:29:06

标签: html css perl cgi

我正在根据表单

从SQLite数据库中读取一些值
my $Fruits= $FORM{Fruits}; 
my $FruitsTable =0; 

从数据库中获取值后,它们应存储在名为my $SelectedFruits的变量中。

while ( my @column = $sth->fetchrow_array() ) {

    $FruitsTable = 1;

    # Within the table there is a row called Tropical which contains bananas, guaves and oranges. I want to select bananas and guaves
    my $SelectedFruits = print "<tr>
                           <td>$Tropical[0]</td>
                           <td>$Tropical[1]</td>
                     </tr>";
}

如果找到它们,应该打印一张带有我选择的表格(我的问题是打印订单时):

if ( $FruitsTable == 1 ) {

    print "<table>
            <thead>
              <tr>
                <th>Bananas</th>
                 <th>Guave</th>
              </tr>
           </thead>
        <tbody>";

    $SelectedFruits;

    print "</tbody></table>";
}

代码退出时没有错误。

这里的问题是首先打印$bananas并且之后会打印表格的页眉和页脚,因此表格看起来很疯狂。

如何首先打印表格标题,然后打印$bananas然后打印表格的页脚?

1 个答案:

答案 0 :(得分:3)

必须始终 use strictuse warnings 'all'位于您编写的每个 Perl程序的顶部。用这个问题对你有很多帮助

问题是这个

my $bananas = print "<tr>
    <td>$happyBananas[0]</td>
    <td>$hippieBananas[1]</td>
</tr>";

将立即打印表格行,将词法变量$bananas设置为1(返回码为print),然后在循环结束时将其丢弃

你想要这样的东西,它将表的内容累积到非本地变量$bananas_rows而不是打印它,然后也可以用作确定的标志是否有要打印的表格

请注意,我使用的是“here documents”,它比较简洁,但比双引号更具可读性

my $bananas_rows; # Don't initialise variables without a reason

while ( my @column = $sth->fetchrow_array() ) {

    $bananas_rows .= <<END_HTML;
<tr>
    <td>$happyBananas[0]</td>
    <td>$hippieBananas[1]</td>
</tr>
END_HTML

}

  if ( $bananas_rows == 1 ) {

   print <<END_HTML;
<table>
  <thead>
    <tr>
      <th>Happy Bananas</th>
      <th>Hippie Bananas</th>
    </tr>
  </thead>
  <tbody>
END_HTML

    print $bananas_rows;

    print "</tbody></table>"; 

}
相关问题