Perl CGI模块的基本帮助

时间:2012-05-01 06:52:41

标签: perl cgi

我想使用Perl CGI模块来创建CGI脚本。我查看了可用的文档 here但我似乎错过了一些明显的东西,因为我有 我的第一个程序遇到了问题。这是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的链接 已发表评论。提到的一点是,我应该尝试运行我的 命令行中的脚本。如何从命令行传递这些参数?

2 个答案:

答案 0 :(得分:4)

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

其次,您尝试打印Content-type标题两次,一次使用$query CGI对象,一次使用$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;

答案 1 :(得分:2)

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

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