Perl CGI打印格式

Perl CGI打印格式,perl,cgi,Perl,Cgi,我遇到了一个相当奇怪的问题。我只是试图通过在存储输入的名称以及与该名称关联的注释的数组中循环来显示用户输入的注释 #Check through each name for ( my $i = 0; $i < scalar @$namesRef; $i++ ) { #Display the comment to the user print @$namesRef[$i].": ".@$commentsRef[$i

我遇到了一个相当奇怪的问题。我只是试图通过在存储输入的名称以及与该名称关联的注释的数组中循环来显示用户输入的注释

#Check through each name
        for ( my $i = 0; $i < scalar @$namesRef; $i++ )
        {
            #Display the comment to the user
            print @$namesRef[$i].": ".@$commentsRef[$i], p; 
        }
下面是调用注释表单的子例程的地方:

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'));
}

主要问题是在打印报表中使用@符号

假设
@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;
    }
}

对不起,我应该提到这些是对子例程之外的数组的引用。这就是为什么有@符号。@Shaun你能展示声明和函数调用吗?“这很重要。”科德诺德说。如果你还需要看别的东西,请告诉我。此外,我还尝试添加chrsblck提到的'->'。不走运。@codnodder我试过使用printf()但还是不走运。奇怪的是,它将名称和注释放在一起,没有空格,然后将冒号放在末尾。@Shaun Try
use Data::Dumper;打印转储程序(名称)。您的输入数组肯定有问题。在这种情况下,在子调用之前不需要
&
build3(\@comments, \@names);

sub build3 {
    my $comments = shift;
    my $names = shift;
    for (my $i = 0; $i < @$names; $i++) {
        print $names->[$i].": ".$comments->[$i], p;
    }
}
use CGI qw/escapeHTML p/;

printf("%s: %s%s\n", escapeHTML($names->[$i]), escapeHTML($comments->[$i]), p);