我遇到了一个相当奇怪的问题。我只是试图通过循环存储输入名称的数组以及与该名称相关联的注释来显示用户输入的注释。
#Check through each name
for ( my $i = 0; $i < scalar @$namesRef; $i++ )
{
#Display the comment to the user
print @$namesRef[$i].": ".@$commentsRef[$i], p;
}
在显示评论的页面上,而不是像约翰那样显示评论:评论&#39;它显示它像Johncomment:&#39;。此外,&#39;,p&#39;不包含在内,因此下一条评论不会转到新行。
我会张贴一张图片来更好地展示问题所在,但我还没有足够的代表:/
编辑:@ -signs存在,因为它们是对此子例程之外的数组的引用。编辑:初始数组在此子例程中声明。
sub buildForm { 我的$ form = shift; #查看按下了哪个按钮。
my $daysOld = 0; #Holds how many days old the user is.
my $commentErrors = 0;
my @names = ();
my @comments =(); #Array to store the user's comments.
my @errorMessages =(); #Array to store the error messages for the current form.
以下是注释表单的子例程:
elsif ( $form == 3 )
{
&readComments(\@comments, \@names, \@errorMessages); #Read in the comments.
#Initial build - Can't have any errors.
&build3(\@comments,\@names, \@errorMessages, $commentErrors, param('name'), param('comment'));
}
elsif ( $form == 4 )
{
$commentErrors = &commentFormErrorCheck( param('name'), param('comment'), \@errorMessages ); #Check for an errors.
&build3(\@comments,\@names, \@errorMessages, $commentErrors, param('name'), param('comment'));
}
答案 0 :(得分:2)
主要问题是在print语句中使用@ -signs。
假设@names
和@comments
是并行数组,显示一个完整的简化示例来演示用法:
build3(\@comments, \@names);
sub build3 {
my $comments = shift;
my $names = shift;
for (my $i = 0; $i < @$names; $i++) {
print $names->[$i].": ".$comments->[$i], p;
}
}
也就是说,您可能需要查看printf
以使该行更具可读性。
另外,不要忘记HTML转义。
编辑:
使用HTML转义和printf()
添加示例。
use CGI qw/escapeHTML p/;
printf("%s: %s%s\n", escapeHTML($names->[$i]), escapeHTML($comments->[$i]), p);