a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Perl > 正文

PerlCGI程式寫作常問問題集(2)Modules(模組)

2019-11-18 17:23:34
字體:
來源:轉載
供稿:網友

 
2.0-Modules(模組)

--------------------------------------------------------------------------------

Q2.1:我是不是該用PerlCGImodules*來寫CGIscripts?自己做不是比較容易嗎?
【譯者】CGImodules在此指CGI.pm及其他CGI::*的模組;詳見Q2.4。

這完全取決於您要做的是什麼。CGImodules較適合重量級的CGIscripts。如果是簡單的scripts的話,自己做或者是用CGILite這個模組會簡便許多。如果您真的愿意,您甚至可以用舊的Perl4cgi-lib.pl這個library*。

【譯注】作者TomC.之所以這麼說是因為他基本上不贊成使用cgi-lib.pl,有興趣的讀者可以看他寫的WhyIamnotfondofcgi-lib.pl(為什麼我不欣賞cgi-lib.pl)。


--------------------------------------------------------------------------------

Q2.2:如何知道某個module該怎麼個用法?
大多數modules的使用說明是直接嵌在程式里的*。如果是這樣的話,您可以用pod2man這個script來閱讀使用指南:

pod2textname_of_module.pm
pod2manname_of_module.pm|nroff-man|more

【譯注】如果您在*.pm檔中看到``=head1''、``=cut''這類的東西便是顯示使用說明有附在里頭。這是LarryWall設計的POD(PlainOldDocument)格式。詳見perlpodmanpages。


--------------------------------------------------------------------------------

Q2.3:有哪些Perl4的CGI或WWW的libraries?
最廣為使用的Perl4CGIlibrary是SteveBrenner的cgi-lib.pl。



--------------------------------------------------------------------------------

Q2.4:有哪些給Perl5使用的CGImodules?我該用哪個?為什麼?
CGI.pm*
這個很棒的module在功能上和部分CGI::*modules相重疊。如果您不想和多重modules打交道的話,您可以只用這一個。我們等一下在後頭會給您看一個用CGI.pm來替CGIscripts除錯的實例。
此外,Lincoln(LincolnStein;CGI.pm的作者)還寫了一本討論Web和CGI非常好的書,叫HowToSetUpandMaintainaWorldWideWebSite。

【譯者】建議讀者多使用CGI.pm。CGI::*已經有很長一段時間沒有更新了,而CGI.pm則不斷的有改良的新版推出,并已加入對FastCGI的支援,因此對FastCGI的使用者也相當方便。此外,mod_perl(Apache的perlmodule)中所附的CGI::XA,也是由CGI.pm改進而來的。CGI.pm讓使用者免除自己做低階資料處理(如印HTTP標頭、替form,cookies資料解碼等)的麻煩。

CGI::*模組套件
這些模組原先大多是由TimBunce所寫,現在則由LincolnStein來負責維護。它們的功能包括了幫您產生及處理form,替CGI程式除錯,以及在不同的forms之間維系一個狀態值。
CGILite
這個輕量級的module是CGI::*modules之外的另一個選擇。它可算是在老舊的cgi-lib.pl之上改良、加料後的產物。
以上叁者均有能力處理multipartform資料(即上傳)。


--------------------------------------------------------------------------------

Q2.5:為什麼這麼多perlCGIlibraries都是object-oriented(物件導向)的?我對用物件導向來寫程式一竅不通。難道就沒有簡單一點,給不會物件導向的人使用的libraries嗎?物件導向有多難?
其實使用物件導向的modules并不難。先去看看TomChristiansen的EasyIntrotoUsingPerlObjects(簡單介紹如何使用Perl物件)吧。

前頭提到的CGImodules用起來真的是很容易!這里有一個用CGILite印出form資料的實例*:

【譯者】CGI.pm的使用說明中有更多范例可供參考。

#!/usr/local/bin/perl-w

useCGI_Lite;

$cgi=newCGI_Lite;
趖a=$cgi->parse_form_data;

PRint"Content-type:text/plain","/n/n";

foreach$key(keys趖a){
print$key,"=",$data{$key},"/n";
}

exit0;

要注意的是,即使您機器上的Perl不是您裝的(您不是系統管理者),或是您權限不夠無法將這些modules和其他的Perllibrary檔案安裝在同一個地方,您還是可以使用這些modules的--只要將它們擺在一個自己方便的地方,然後在您的script開始處加上*:

BEGIN{
unshift@INC,"/your/dir/favorite/place";
}

【譯者】建議改用較新的方式:

uselibqw(/your/dir/favorite/place);

好。以下是一個用到CGI::*modules的例子:

#!/usr/local/bin/perl-w

useCGI::Form;

$cgi_form=newCGI::Form;

print<<'End_of_Header';

看著我做!

看著我做!


End_of_Header

print$form->startform;

##產生一個單行輸入欄位(textfield)

print'姓名:';
print$form->textfield('name'),"
/n";

##產生一組單選按紐(radiobuttons)

print'

您住哪兒:
';
print$form->radio_group(-name=>'where',
-values=>['北美洲',
'南美洲',
'歐洲',
'澳洲',
'亞洲',
'南極洲'],
-default=>'北美洲',
-linebreak=>'true');

##產生一個多行輸入欄位(textarea)

print'意見:';
print$form->textarea('comments',undef,5,40);

print"

";
print$form->reset;
print$form->defaults;
print$form->submit('送出!','Submit');
print$form->endform;

print"";

reset、defaults,及submit叁種方法(methods)會產生不同的類型的按鈕。reset這個按鈕讓您把目前form欄位中所填的資料洗掉,并顯示屬於上一個狀態(或回合)的資料。defaults這個按鈕則是將form欄位資料徹底洗去。還有submit這個方法產生一個送出鈕以便讓人將資料送至server處。

您看,不是很容易嗎?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲男人天堂网 | 国产一区二区免费 | 不卡视频一区二区三区 | 亚洲精品视频在线看 | 欧美日日 | 一区二区三区 在线 | 日韩专区在线播放 | 亚洲精品一区二区三区在线看 | 欧美在线一区二区三区 | 美国黄色毛片女人性生活片 | 密室大逃脱第六季大神版在线观看 | 国产精品久久久久影院色老大 | 国产精品禁久久精品 | 国产一区二区不卡 | 青青久在线视频 | 成人a视频在线观看 | 国产又色又爽又黄 | 小罗莉极品一线天在线 | 欧美日韩成人在线播放 | 久久精品亚洲精品 | 国产成人久久精品一区二区三区 | 欧美精品一区视频 | 九九九色| 成人精品在线观看 | 亚洲一区 | 大黄网站在线观看 | 精东粉嫩av免费一区二区三区 | 狠狠综合久久av一区二区小说 | 亚洲午夜免费视频 | 欧美成人免费在线 | 国产成人在线免费观看 | 久久久久国产精品一区二区三区 | 精品久久久久久久久久久久 | 久久九 | 欧美激情视频久久 | 国产精品一区二区久久精品涩爱 | 青草精品| 亚洲视频在线看 | 黑人精品 | 欧美一级片在线观看 | 久久久精品久久久久 |