2017-01-26 8 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

Вы, наверное, считаете, что вы упрощая код для нас, используя «бананы» повсюду, но на самом деле вам стало неудобно читать. Когда * каждая * переменная содержит «бананы», она не предоставляет никакой информации и должна быть удалена повсюду. – Borodin

ответ

3

Вы должны всегдаuse strict и use 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

Привет @ Бородин, спасибо, я учусь! У меня ошибка: «Не могу найти ограничитель строк« END_HTML »где-нибудь перед EOF« Я что-то упускаю? –

+0

@ Chüngel: Убедитесь, что у вас нет места в конце 'END_HTML' – Toto

+0

@ Chüngel: Да, до или после' END_HTML' не должно быть пробелов. Это ограничение, которое должно быть смягчено в ближайших версиях Perl 5. – Borodin

 Смежные вопросы

  • Нет связанных вопросов^_^