2012-05-01 17 views
3

CGIスクリプトを作成するためにPerl CGIモジュールを使用したいと思います。私は hereのドキュメントを手に入れましたが、私は が私の最初のプログラムで問題に遭遇したので、何かが分からないようでした。Perl CGIモジュールの基本ヘルプ

<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ファイルに渡されるパラメータの名前が新しい ページに印刷したい:ここではHTMLです。だから私の理解が限られているので、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です。 私はここで非常に単純なものが欠けていることを知っていますが、私は本当にこれでいくつかの助けが必要です。どうすればいいですか このスクリプトを正しく書いていますか? Windows XPでXAMPPを使用しています。

EDIT:私はこれを自分自身で理解しようとしていることを言及する必要があります。だから私は、作品 次のスクリプトを書きました:

#!/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つは、コマンドラインから スクリプトを実行する必要があるということです。これらのパラメータをコマンドラインから渡すにはどうすればよいですか?

+1

(http://stackoverflow.com/questions/2165022/how-can-i-troubleshoot-my-perl-cgi-script)[どのように私は私のPerl CGIスクリプトのトラブルシューティングを行うことができます]を参照してください? –

+0

@NikhilJainはリンクをありがとうございましたが、私は既にそれを早めに行っていました。彼らの提案のどれが私のケースに当てはまるのか、あなたはもっと具体的になりますか?私の編集を見てください。 – user828647

答えて

4

あなたが持っていた最初の問題は、あなたが期待通りに次の行my @names = $query->paramが働いていなかったことを意味クエリオブジェクトを破壊し、戻ってあなたの$query変数に$query->header('text/html')を呼び出した結果を代入されたということでした。

第2に、$query CGIオブジェクトを使用し、$q1オブジェクトを1回使用して、Content-typeヘッダーを2回印刷しようとしました。

不要な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; 
+0

ありがとう!私はこれを先に見落としたとは信じられない! – user828647

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

この行は問題の一部です。 $query->header()は何らかのテキストを返しますが、それは$queryを設定するのに有用な値ではありません。 2つのヘッダーセットを印刷するだけで、2つのCGIオブジェクト($query$q1)も作成しています。重複や不適切な割り当てを取り除くと、うまくいくはずです。

+0

'text/html'ではなく、$ queryをどのように設定すればよいですか? – user828647

+0

私は今理解しています。提案していただきありがとうございます。 – user828647