2012-05-01 79 views
3

我想使用Perl CGI模塊來創建CGI腳本。我通過了可用的文檔 here,但我似乎錯過了一些明顯的東西,因爲我有 遇到了我的第一個程序的問題。下面是HTML: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文件中的參數的名稱。所以(我的理解有限),我在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 已發表評論。其中一點是我應該嘗試從命令行運行我的 腳本。如何從命令行傳遞這些參數?

+1

請參閱[如何解決我的Perl CGI腳本](http://stackoverflow.com/questions/2165022/how-can-i-troubleshoot-my-perl-cgi-script)? –

+0

@NikhilJain感謝您的鏈接,但我已經早點完成了。你能更具體地瞭解哪些建議可以適用於我的案例?請參閱我的編輯。 – user828647

回答

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; 
+0

謝謝!我不能相信我早些時候忽略了這一點! – user828647

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

此行是您的問題的一部分。 $query->header()返回一些文本,這對設置$query來說不是有用的值。您還將創建兩個CGI對象($query$q1),您只需要一個對象並打印兩組標題。擺脫重複和不適當的任務,你應該沒問題。

+0

我應該設置$ query來代替'text/html'嗎? – user828647

+0

我現在明白了。感謝您的建議。 – user828647