在Perl cgi代码的这一部分中$_
变量无法使用Perl cgi在<td>
标记内打印其内容?
sub do_work {
my $fh = shift;
my $content;
while ( my $line= <$fh> ) {
my @name1 = grep {$_ =~ m/^\[/} $line;
s/\W//g for @name1;
$content .= join '', @name1;
}
return $content;
}
sub do_task {
my $fh = shift;
my $load;
while(my $firstline = <$fh>) {
$firstline =~ s/.*=//g;
my @words = split /,., $firstline;
my $add = 0;
$load1 .= join("\n", @words);
}
return $load1;
}
sub layout {
my ($load, @words = @_;
my $add = 0;
print << "EOF";
<html><body><table>
<tr>
<th>s.no</th>
<th>name</th>
</tr>
EOF
foreach(@words) {
$add++;
print<<"EOF"
<tr>
<td>$add</td>
<td>$_</td>
EOF
}
print <<"EOF"
</table></body></html>
EOF
}
描述:
@words
。我尝试将相同的数组内容加载到<td>
标记中。但是从我的代码来看,它并没有进入foreach?因为没有加载其内容的错误。预期产出:
从$load1
得到以下输出:
hardware
software
os
所以我试着将它打印在表格中,即在<td>
标签内,所以我使用了foreach循环来取默认值。
现在我希望我的输出应该如下:
s.no name
1 Hardware
2 Software
3 os
答案 0 :(得分:1)
HEREDOC的EOF
标记需要一直在左边。它不能有前导空格。因此,应该存在语法错误,因为解析器不会将其余代码识别为代码。
看起来应该是这样。
sub layout
{
my($load)=@_;
my @words=@_;
my $add=0;
print << "EOF";
<html><body><table>
<tr>
<th>s.no</th>
</tr>
EOF
foreach(@words)
{
$add++;
print<<"EOF"
<tr>
<td>$add</td>
<td>$_</td>
EOF
}
print <<"EOF"
</table></body></html>
EOF
}
Perl 5.26可能会提供缩进的HEREDOC。随着开发版5.25.7发布了一个新功能,它引入了新的语法<<~"EOF"
。但是你可能没有那个版本,或者更新版本。
除此之外,您将函数的第一个参数放在$load
中,还放入@words
。那可能是错的。那应该是my ($load, @words) = @_
。