Perl 程式設計/CGI
假設您已經擁有一個 Apache 伺服器(或相容的伺服器,可以讀取 shebang! 行 - 稍後會詳細介紹)和一個正在執行的 Perl 安裝,在網際網路上執行 Perl 程式相當簡單。
首先,您必須有一種訪問程式的方法。在這裡我們將處理表單資料和提交,因此我們將假設您的 HTML 中的表單程式碼有一個屬性,寫著 ACTION="programname.cgi"。
CGI 指令碼像任何其他 Perl 程式一樣開始,使用“shebang”,類似於
#!/usr/bin/perl
(有關詳細資訊,請參閱 Perl 程式設計/第一個程式)
接下來載入 CGI 模組
use CGI;
CGI 模組使我們的工作變得輕鬆,因為它預先程式設計了用於網際網路使用的函式。然後我們必須建立一個 CGI 處理器 - 可以讓我們訪問函式的東西。我們用以下程式碼來實現
my $query = CGI->new();
這意味著變數 $query 正在載入 CGI 標準函式。
現在我們的程式已經使用 CGI 模組設定好了,它應該看起來像這樣
#!/usr/bin/perl
use CGI;
my $query = CGI->new();
所以我們有一個程式,它只是什麼也不做,實際上會導致伺服器錯誤,因為伺服器沒有輸出,也不知道應該顯示什麼型別的輸出,即使它有一些輸出。
在我們告訴伺服器如何處理我們的輸出之前,我們需要檢索我們的輸入。為此,我們使用$query我們之前宣告的變數。假設我們在表單中有一個名為“Name”的文字框,我們想知道在那裡輸入了什麼。為此,我們在程式中新增以下程式碼行
my $Name = $query->param('Name');
現在,這行程式碼介紹了param()函式(用於“引數”)。該param()函式可以為我們執行許多方便的操作,它們都是檢索變數的好方法。它處理所有 HTTP 編碼,因此我們得到的只是一個乾淨的變數。另一個需要注意的是,您不需要使用$Name作為您的變數。只記住一個變數的名稱,這樣更方便。不過,還是使用最適合您的方法。
現在我們必須建立我們的標題資訊。CGI 甚至使這變得容易。我們不必記住一大堆 mime 型別宣告(您也可以這樣做),我們只需要輸入
print $query->header();
它就會打印出我們的標題資訊。關於標題的一點說明。在括號內,我們可以指定引數,例如要傳送給使用者瀏覽器的 cookie。這在以後會非常有用。現在我們只堅持標題。
您需要放入的最後一樣東西(雖然程式會執行,但會顯示一個空白頁面,沒有它),是一些輸出。讓我們簡單地讓它將使用者的姓名顯示給他們。這將看起來像這樣。
print " You said your name was: $Name";
所以我們現在有一個完整的程式,它處理表單,只用六行程式碼。Perl 難道不棒嗎?最終程式碼看起來像這樣
#!/usr/bin/perl
use CGI;
my $query = new CGI;
my $Name = $query->param('Name');
print $query->header();
print "You said your name was: ", $query->escapeHTML($Name);
從透視的角度來看,我們可以看到$query變數是與 CGI 模組非常重要的連線,因為它告訴 perl 您引用的函式屬於 CGI;再次強調,您可以宣告任何變數名來代替$query只要您保持一致,雖然您會發現許多開發人員使用$query或$q. 還要注意使用escapeHTML方法來避免任何 HTML 注入 問題。
最後注意:確保您將/usr/bin/perl更改為您的 perl 安裝路徑(假設不是它),這樣 perl 才能正確執行。
有許多 CGI 框架可以幫助完成常見的 CGI 程式設計任務