Perl变量执行顺序
Perl variables order of execution
我正在基于表单从 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>";
}
如果找到,应该打印一个 table 我的选择(我的问题是打印顺序):
if ( $FruitsTable == 1 ) {
print "<table>
<thead>
<tr>
<th>Bananas</th>
<th>Guave</th>
</tr>
</thead>
<tbody>";
$SelectedFruits;
print "</tbody></table>";
}
代码退出没有错误。
这里的问题是先打印$bananas
,然后打印table的页眉和页脚,所以table看起来很疯狂。
如何先打印 table 的页眉,然后打印 $bananas
,然后再打印 table 的页脚?
您 必须始终 use strict
和 use warnings 'all'
在 每个 你写的Perl程序。这个问题对你有很大帮助
问题是这个
my $bananas = print "<tr>
<td>$happyBananas[0]</td>
<td>$hippieBananas[1]</td>
</tr>";
会立即打印table行,设置词法变量$bananas
为1(print
的return代码)然后在最后扔掉循环
你想要这样的东西,它将 table 的内容累积到 non-local 变量 $bananas_rows
而不是打印它,然后也可以作为flag判断是否有table打印
请注意,我使用了 "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>";
}
我正在基于表单从 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>";
}
如果找到,应该打印一个 table 我的选择(我的问题是打印顺序):
if ( $FruitsTable == 1 ) {
print "<table>
<thead>
<tr>
<th>Bananas</th>
<th>Guave</th>
</tr>
</thead>
<tbody>";
$SelectedFruits;
print "</tbody></table>";
}
代码退出没有错误。
这里的问题是先打印$bananas
,然后打印table的页眉和页脚,所以table看起来很疯狂。
如何先打印 table 的页眉,然后打印 $bananas
,然后再打印 table 的页脚?
您 必须始终 use strict
和 use warnings 'all'
在 每个 你写的Perl程序。这个问题对你有很大帮助
问题是这个
my $bananas = print "<tr>
<td>$happyBananas[0]</td>
<td>$hippieBananas[1]</td>
</tr>";
会立即打印table行,设置词法变量$bananas
为1(print
的return代码)然后在最后扔掉循环
你想要这样的东西,它将 table 的内容累积到 non-local 变量 $bananas_rows
而不是打印它,然后也可以作为flag判断是否有table打印
请注意,我使用了 "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>";
}