【问题标题】:Perl CGI print formatPerl CGI 打印格式
【发布时间】:2013-12-30 05:16:31
【问题描述】:

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

#Check through each name
        for ( my $i = 0; $i < scalar @$namesRef; $i++ )
        {
            #Display the comment to the user
            print @$namesRef[$i].": ".@$commentsRef[$i], p; 
        }

在显示 cmets 的页面上,而不是像“John:comment”那样显示它们,而是像“Johncomment:”那样显示它。此外,',p' 不包括在内,因此下一条评论不会换行。

我会放一张图片来更好地显示问题所在,但我还没有足够的代表:/

编辑:@ 符号在那里,因为这些是对该子例程之外的数组的引用。

编辑:初始数组在此子例程中声明。

子构建表单 { 我的 $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'));
}

【问题讨论】:

  • 在这种情况下,您的子调用之前不需要&amp;

标签: perl cgi


【解决方案1】:

主要问题是在打印语句中使用@-符号。

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

【讨论】:

  • 对不起,我应该提到这些是对子例程之外的数组的引用。这就是@符号存在的原因。
  • @Shaun 你能显示声明和函数调用吗?它有所作为。
  • @codnodder 完成。如果您需要看其他任何东西,请告诉我。另外,我尝试添加 chrsblck 提到的“->”。没有运气。
  • @codnodder 我尝试使用 printf() 仍然没有运气。奇怪的是,它将名称和注释放在一起,没有空格,然后只是将冒号放在末尾。
  • @Shaun 试试use Data::Dumper; print Dumper($names);。您的输入数组一定有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2016-02-18
相关资源
最近更新 更多