3

PerlCGIモジュールを使用して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;

しかし、これは何も出力しません。エラーも発生せず、構文はOKです。私はここで非常に単純なものが欠けていることを知っていますが、これについては本当に助けが必要です。このスクリプトを正しく書くにはどうすればよいですか?違いがあれば、WindowsXPで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がコメントに投稿したリンクを見ました。ここで言及されているポイントの1つは、コマンドラインからスクリプトを実行してみる必要があるということです。これらのパラメータをコマンドラインから渡すにはどうすればよいですか?

4

2 に答える 2

4

最初の問題は、呼び出しの結果を変数に割り当て、$query->header('text/html')クエリ$queryオブジェクトを破棄していたことでした。これは、次の行my @names = $query->paramが期待どおりに機能していなかったことを意味します。

次に、Content-typeヘッダーを2回印刷しようとしました。1回は$queryCGIオブジェクトを使用し、もう1回は$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。また、1つだけが必要な2つのCGIオブジェクト($queryおよび)を作成し、2セットのヘッダーを印刷しています。$q1重複と不適切な割り当てを取り除いてください。そうすれば大丈夫です。

于 2012-05-01T07:16:57.277 に答える