2017-01-26 44 views
-1

的順序,我從SQLite數據庫讀取一些值,基於表單Perl的變量執行

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,然後表的頁腳?

+0

你可能認爲你是簡化了更具可讀性通過使用我們的代碼'bananas'所有的地方,但事實上,你已經變得更加尷尬的閱讀。當*每個*變量包含「香蕉」時,它不提供任何信息,應該隨處刪除。 – Borodin

回答

3

必須始終use strictuse warnings 'all'你寫的每一個 Perl程序的頂部。這本來是一個很大的幫助,你這個問題

的問題是,這

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

將立即打印表行中,將詞法變量$bananas 1(共print返回代碼)然後把它扔掉,在循環結束

你想是這樣的,而不是,它積累表的內容爲非本地變量$bananas_rows,而不是打印出來,並且然後還可以用作標誌判斷是否有打印

注意的表,我用「這裏的文檔」,這相當弄亂縮進,但比裸雙引號

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>"; 

} 
+0

@Borodin您好,感謝,我學習!我現在有一個錯誤「無法找到字符串終止符」END_HTML「EOF之前的任何地方」我錯過了什麼嗎? –

+0

@Chüngel:確保END_HTML'末尾沒有空格 – Toto

+0

@Chüngel:是的,END_HTML'之前或之後必須沒有空格。這是近期Perl 5發佈時應該放寬的限制。 – Borodin