3

我想使用 Perl CGI 模块来创建 CGI 脚本。我浏览了此处提供的文档 ,但我似乎错过了一些明显的东西,因为我的第一个程序遇到了问题。这是HTML:

<form name="form1" method="post" action="http://localhost/cgi-bin/filters.cgi">
<input name="mainbox" type="checkbox"> Mainbox<br> <br>
<input name="n1" type="checkbox">No. 1 <br><br>
<input name="n2" type="checkbox"> No. 2<br><br>
<input name="n3" type="checkbox">No. 3 <br>
<div style="text-align: center;"><input name="Submit" value="Submit" type="submit"></div>
</form>

我只是希望将传递给 CGI 文件的参数名称打印在新页面上。所以(以我有限的理解),我在filters.cgi中写了以下内容:

#!/xampp/perl/bin/perl -w
use strict;
use warnings;
use CGI;

my $query = CGI->new;
print $query = $query->header('text/html');
my @names = $query->param;

my $q1 = CGI->new;
print $q1->header('text/html');
print $q1->start_html('hello');
foreach my $name (@names) {
    print $q1->h1($name);
}
print $q1->end_html;

但这没有打印出来。它也没有给我任何错误,语法也可以。我知道我在这里遗漏了一些非常简单的东西,但我真的需要一些帮助。如何正确编写此脚本?我在 Windows XP 中使用 XAMPP,如果这有什么不同的话。

编辑:也许我应该提到我自己试图解决这个问题。所以我编写了以下有效的脚本:

#!/usr/bin/perl
use strict;
use warnings;
use CGI;

my @arr = ('ac', 'fg', 'ty');
my $q1 = CGI->new;
print $q1->header('text/html');
$q1->start_html('hello world');
foreach my $el (@arr) {
    print $q1->p($el);
}
$q1->end_html;

所以问题出在传递的参数中。我什至不知道在冗长的文档中哪里可以寻求帮助,所以决定在这里提问。另外,我看到了 Nikhil 在评论中发布的链接。提到的要点之一是我应该尝试从命令行运行我的脚本。如何从命令行传递这些参数?

4

2 回答 2

4

您遇到的第一个问题是您将回调的结果分配给$query->header('text/html')您的$query变量,破坏了查询对象,这意味着下一行my @names = $query->param没有按预期工作。

其次,您尝试打印Content-type标题两次,一次使用$queryCGI 对象,一次使用$q1对象。

我已经删除了不必要的 CGI 对象,并且在所有情况下都$q1使用了原始对象。$query

以下是应用了上述修复的代码。

#!/xampp/perl/bin/perl -w
use strict;
use warnings;
use CGI;

my $query = CGI->new;
my @names = $query->param;

print $query->header('text/html');
print $query->start_html('hello');

foreach my $name (@names) {
    print $query->h1($name);
}

print $query->end_html;
于 2012-05-01T08:38:25.320 回答
2
print $query = $query->header('text/html');

这条线是您问题的一部分。$query->header()返回一些文本,这不是一个有用的值$query。您还创建了两个只需要一个的CGI对象 ($query$q1),并打印了两组标题。摆脱重复和不适当的分配,你应该没问题。

于 2012-05-01T07:16:57.277 回答