子例程无法使用perl cgi获取td标记内的变量?
在Perl cgi代码的这一部分中,变量未能使用Perl cgi打印标记内的内容子例程无法使用perl cgi获取td标记内的变量?,perl,cgi,Perl,Cgi,在Perl cgi代码的这一部分中,变量未能使用Perl cgi打印标记内的内容 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;
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
}
所以我尝试在表中打印它,即在标记内部,所以我使用了foreach循环来获取默认值
现在我希望我的输出应该如下所示:
s.no name
1 Hardware
2 Software
3 os
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
}
Perl5.26可能提供缩进的HEREDOCs。开发版本发布了一个新特性,在缩进后引入了新语法。我也发现了同样的问题@simbabqueadded expected output@simbabquewhy在foreach循环中未关闭@simbabque@insite因为我是从问题中抄来的,它也不见了@insite我和其他人都在对这个问题的评论中要求您至少编译那里的代码,并包含示例输入。如果你不这样做,我们就不会帮助你,因为我们不能。你可能认为这只是一个例子,所以这不重要,但它确实重要。大多数情况下,当你试图将问题简化为一个最小的例子时,你会自己发现问题。问题往往不在你认为的地方。我愿意免费帮助你,在我的休假日,我的国家今天有一个银行假期,但前提是你也帮忙。这不是你真正的代码。它有语法错误。请包括你的真实代码!当你在做这件事的时候,也请包括一些例子数据来重现这个问题,并解释你期望的输出。真正的代码太大了,这就是为什么我在代码中添加了显示问题的部分@Simbabques增加了预期输出@Simbabquen你的缩进很糟糕,你的大括号位置不一致。如果你想让人们阅读和理解你的代码,请花点时间让它尽可能容易阅读。我知道你的代码太大,无法共享。但是你给我们的代码至少应该编译。为了使代码更具可读性,我刚刚检查了代码,发现至少有两行有明显的语法错误——my@words=split/,,,$firstline;还有我的$load,@words=@;。如果你不能花时间让你的代码甚至可以编译,那么我们为什么要花时间看它呢?
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
}