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 程式設計任務