perlfaq1 - 有關Perl 的一般問題(2003/11/23 08:02:29)

文章推薦指數: 80 %
投票人數:10人

什麼是Perl Perl是一個高階程式語言,由Larry Wall和其他許多人所寫,融合了許多 ... 話雖如此,對解決某些特定的問題,使用小型、專精,專為特殊用途設計的語言總是 ... Providedby:manpages-zh_1.6.3.6-1_all NAME perlfaq1-有關Perl的一般問題(2003/11/2308:02:29) DESCRIPTION描述 有關Perl的一般的,非技術層次的問題 WhatisPerl?什麼是Perl Perl是一個高階程式語言,由LarryWall和其他許多人所寫,融合了許多語言的特性。

它主要是由無 所不在的C語言,其次由sed、awk,UNIXshell和至少十數種其他的工具和語言所演化而來。

Perl對 process、檔案,和文字有很強的處理、變換能力,因此舉凡有關快速原型設計、系統工具、軟體工 具、系統管理、資料庫連結、影象程式設計、網路連結,和WWW程式設計等之類的任務,都特別適合 用Perl來做。

這些特長不但使Perl成為系統維護管理者和CGI作者的寵兒,就連數學家、遺傳學 家、新聞從業者,甚至企業管理者也都用Perl,所以或許您也該用。

誰對Perl提供支援?誰開發了它?為什麼它是自由的? Perl自由開放的發行方式要歸功於發燒前的Internet的傳統文化及其作者LarryWall。

Perl是由使用 者提供支援。

現在Perl的核心、標準程式庫、選擇性安裝的模組,以及您現在正在閱讀的使用說明都 出自於義務者之手。

詳情請見perl原始碼發行版中所附的README檔案底部的私人註記。

值得一提的是,核心發展小組(稱為PerlPorters)的成員是一群高度熱情奉獻的人仕,全心投入發 展出比您所能想像、用錢能買得到還要更好的免費軟體。

您可經由 http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/和 http://archive.develooper.com/[email protected]/或者新聞伺服器 nntp://nntp.perl.org/perl.perl5.porters或它的web介面 http://nntp.perl.org/group/perl.perl5.porters,也可以訂閱郵件列表 [email protected](沒有主題的空訊息也是可以的)取得關於新近發展計畫的資訊。

儘管GNU計畫將Perl囊括在它的發行中,但是沒有叫「GNUPerl」這樣的東西。

Perl既非自由軟體基 金會所創,亦非由其負責維護。

Perl的發行條款同時也較GNU軟體更來得開放。

如果您願意,您可以購買商業性的Perl支援。

但對大多數使用者來說,非正式性的支援通常已相當足 夠。

詳情請見「到哪裡可買到商業性的Perl支援」一問的回答。

WhichversionofPerlshouldIuse?我該用哪一個版本的Perl? 您絕對該用第五版。

第四版不但老舊、功能較侷限,而且已經不再維護了。

它最後一次的修正 (4.036)是在1992年。

Perl最新的量產發行版本是5.8.2(但是5.005_03和5.6.2也被支援)。

等到 您讀這篇文章時,我們可能已經又發行了幾個正式的除錯版本,同時大概又會有些替下一版路的實驗 版出來。

本文由此開始凡提及Perl語言,皆以目前的量產發行為準,除非另外特別註明。

所有5.004 之前的版本都有buffer溢位漏洞,是非常嚴重的問題。

perl4和perl5各代表什麼? perl4和perl5是對Perl程式語言的兩個不同版本的非正式稱呼,因為說「perl5」要比說「第 5(.004)版的Perl」要來得簡單。

但是有些人誤將其會意為:perl5是一個單獨的語言;這是不正確 的。

perl5只不過是對第五個主要發行版本(1994年10月)常用的稱呼罷了。

就像perl4是指第四個 主要發行(1991年3月),還有perl1(1988年1月)、perl2(1988年6月),以及 perl3(1989年10月)。

5.0的發行基本上是從零開始,所有程式碼完全重新寫過的版本。

它已經被模組化、物件導向化、微 調、精簡化,及效率化,以致程式碼幾乎已變得和原來的不相同了。

儘管如此,使用介面大致上仍然相 同,而且和先前的版本之間保持了很高的一致性。

參見perltrap中的"Perl4toPerl5Traps". 為了避免「perl5是什麼語言?」這類的混淆,有些人索性完全避免「perl5」,而單用「perl」來指稱 最近的perl版本。

其實用不著這麼累就是了。

參見perlhist中Perl版本的歷史 WhatisPonie?什麼是Ponie AtTheO'ReillyOpenSourceSoftwareConventionin2003,ArturBergman,Fotango,andThe PerlFoundationannouncedaprojecttorunperl5ontheParrotvirtualmachinenamed Ponie.PoniestandsforPerlOnNewInternalEngine.ThePerl5.10language implementationwillbeusedforPonie,andtherewillbenolanguageleveldifferences betweenperl5andponie.Ponieisnotacompleterewriteofperl5. Formoredetails,seehttp://www.poniecode.org/ Whatisperl6? AtTheSecondO'ReillyOpenSourceSoftwareConvention,LarryWallannouncedPerl6 developmentwouldbegininearnest.Perl6wasanoftusedtermforChipSalzenberg's projecttorewritePerlinC++namedTopaz.However,Topazprovidedvaluableinsightsto thenextversionofPerlanditsimplementation,butwasultimatelyabandoned. IfyouwanttolearnmoreaboutPerl6,orhaveadesiretohelpinthecrusadetomake PerlabetterplacethenperusethePerl6developerspageathttp://dev.perl.org/perl6/ andgetinvolved. Perl6isnotscheduledforreleaseyet,andPerl5willstillbesupportedforquiteawhile afteritsrelease.DonotwaitforPerl6todowhateveryouneedtodo. "We'rereallyseriousaboutreinventingeverythingthatneedsreinventing."--LarryWall Perl的發展已穩定了嗎? 融合了除錯和新功能的量產發行在推出前皆經過廣泛的測試。

自5.000發行以來,我們平均一年才出版 一次量產發行。

Larry和Perl發展小組有時候會修改語言的核心部分,但總是盡一切力量讓新版和舊版保持一致。

因 此,儘管不是所有的perl4scripts都能在perl5之下跑得天衣無縫,因升級而導致按照先前版本的 perl所寫的程式無法使用的情形幾乎不曾發生(除非該程式倚賴已經被去除的bugs,或使用了極少數 新加入的指令來命名)。

Perl難學嗎? Perl不但容易上手,也容易繼續學下去。

它看起來和大多數您可能已接觸過的語言一樣。

所以如果您只 寫過C程式、或awkscript、shellscript,或甚至只是Excel的macro宏,您已經在半路了。

大多數的任務只需要Perl語言的一小部分即可完成。

發展Perl程式的座右銘即是「不只一種方法可以 達到」(TMTOWTDI;There'sMoreThanOneWayToDoIt,有時讀作「timetoday」)。

因 此,Perl的學習曲線是既平(易學)且長的(如果您要的話,有一大堆夠您學的) 最後,Perl(通常)算是解釋執行的語言。

也就是說您寫了程式後不需經由一道中間的編碼過程即可測 試;這讓您可以很快、很容易地測試及除錯。

這個方便試驗的特性又讓學習曲線變得更加平坦。

有助於修習Perl的一些事:UNIX經驗、對幾乎是任何一種程式語言的經驗、瞭解regular expressions(正規表示法),以及看得懂旁人寫的程式的能力。

如果您有什麼想用Perl來做的事,那 麼可能已經有前人做過了,而且例項通常可免費取得。

還有別忘了新的Perl模組。

模組在這份FAQ的 第叄部分有詳細的討論,還有【別忘了您的好朋友】CPAN,這會在第二部分談到。

HowdoesPerlcomparewithotherlanguageslikeJava,Python,REXX,Scheme,orTcl? Perl在某些地方比較好,某些地方較差。

精確地說到底哪些方面好或壞通常視個人偏好而定,所以在新 聞討論群中問這種問題很可能會掀起一場毫無建設性的聖戰。

要比較各語言的異同最好的方法是試著用不同的語言寫功能相同的程式。

各程式語言都各有屬於它們各 自的新聞討論群,您可從中學習(但希望您不是去和人辨論吵架的)。

如果還是不聽勸告的話,可以去看http://language.perl.com/versus/的語言比較 我可以用Perl來做【某種差事】嗎? Perl有足夠的彈性和擴充性,從只需要寫短短一行的檔案處理工作到複雜的系統,幾乎沒有什麼做不到 的。

對有些人來說,Perl的是拿來做寫shell程式的理想替代品。

其他人則用高階的Perl來替代處理 許多原先需要用C或C++一類的低階語言來達到的程式。

哪些差事決定要用Perl來處理,這一切都得 看您(或許還有您的經理...)。

如果您有一個提供API的程式庫的話,您可用C或C++來寫一個Perl延伸,然後便可透過它將程式庫 中的任何一部分動態載入您的Perl主程式中。

您也可以反過來,用C或C++來寫主程式,然後以即時 動態載入的方式插入一些Perl程式碼,產生一個威力強大的應用程式。

參見perlembed. 話雖如此,對解決某些特定的問題,使用小型、專精,專為特殊用途設計的語言總是比較方便的。

Perl的設計是盡力地滿足各種不同人的需要,因而不特別偏頗任何人。

至於特殊功能語言的例子,隨便 舉兩個,譬如prolog和matlab便是。

哪些場合下不適合用Perl? 當您的主管禁止的時候--不過請務必考慮把他們換掉:-)。

說真的,如果您已經有用另一個語言寫成的應用程式(而且寫得很好)的時候,或者是已經有替某些特 定的工作設計的語言(例如:prolog,make),這個時候就不需要用Perl。

由於種種因素,Perl大概不太適合拿來做即時內嵌式系統、屬於低層級的作業系統發展工作,例如周邊 裝置的drivers或環境轉換碼、複雜的多線共用記憶體應用程式,或非常大的應用程式。

您會發現 Perl本身便不是以Perl寫成的。

剛出爐的Perl純碼編譯器或許可幫忙去除一些上述的限制,但您要了解:Perl在本質上仍是一活性變 數語言(dynamicallytypedlanguage),而非固性變數(staticallytyped)。

只要您不將核電廠或腦 科手術監視器所用的程式放心地用Perl來寫,您自然就不會闖禍遭殃。

這樣Larry晚上也可以睡得安 穩些了:-)。

「perl」和「Perl」有什麼不同? 二者差一個位元。

喔,您不是說在ASCII上的差別啊?:-)Larry現在用「Perl」來代表語言本身,而 以「perl」來表示該語言的體現,即目前的解譯器。

因此,作者有句幽默小語說:「只有perl可以解 譯Perl」。

要不要遵照這個用法是您的自由。

舉一反叄的話,我們可依樣畫葫蘆地說「awk和 perl」還有「Python和Perl」,但卻不可將「awk和Perl」或是「Python和perl」擺在一起。

Perl程式應算是program還是script? 都無所謂。

他半開玩笑地說,"指令碼script是你讓演員來演的。

程式program是你給觀眾的。

" 最初,指令碼是打包的普通的互動的命令序列,--也就是說,一個對話指令碼,類似UUCP或PPP對 話指令碼或者一個expect指令碼,可以很好地處理一些小事,類似在應用程式啟動之前進行一些俄設 定等等,類似.cshrc或.ircrc。

對話指令碼僅僅是驅動已有的程式,並不是獨立的程式。

計算機專家會解釋說,所有程式都是解釋執行的,但是問題是從哪個層次去考慮。

如果你問一個不是計 算機專家的人,他們可能告訴你,一個program是已被編譯為機器碼,一次編譯多次執行的東西,而 一個script在每次使用時都必須首先翻譯為program Perl程式通常不是嚴格的編譯或解釋執行的。

它們可以被編譯為位元組碼形式(可以在Perl虛擬機 器中執行)或者完全不同的其他語言,例如C或彙編。

你不能僅僅從源程式推斷它是否應當被一個純 直譯器,一個分析樹直譯器,一個位元組碼直譯器或者一個原生代碼編譯器來執行,因此在這裡很難給 出一個確定的答案 現在script和scripting已成為被不慎重的人和無知的商人為了自己惡毒的目的而用到的兩個 詞,它們開始擁有奇怪的,貶義的含義,類似"不嚴謹nonserious"或"不是真正的程式設計".因 此,一些Perl程式設計師選擇不把它們同時比較。

JAPH是什麼? 這是過去一些在討論群中自稱``justanotherperlhacker''的人的簽名檔,RandalSchwartz開了 這樣的先河。

約有一百個比較早期的版本,可在http://www.cpan.org/misc/japh獲得。

到哪兒可拿到LarryWall的智慧諷語(witticisms)? 一百多條Larry的諷語,源自他【在討論群】的posts或原始碼,可在 http://www.cpan.org/misc/lwall-quotes.txt.gz獲得 我要如何取信、說服我的系統管理者/上司/屬下使用第5/5.8.3版的Perl,而不去用其他的語言? 如果您的管理階層或屬下對沒有支援的軟體,或是未正式包含在所購買的作業系統中的軟體存有戒心的 話,您可以試著從有助他們自身利益這方面下手。

因為如果程式設計師能由善加利用Perl的結構、功 能性、簡單性,和威力而獲得更大的生產力的話,那麼典型的管理者/上司/員工或許便可因而加以說 服。

此外,使用Perl,總的來講,和其他語言相較,或許也有助於減少交件的時間。

強調這個論點或 許對說服他們會有幫助。

如果您的專題碰到瓶頸,特別是有關轉譯或測試方面的問題,那麼Perl可以說絕對會是一個既可行且 快的解決之道。

您在當說客的時候,千萬別忘了要提:Perl已被世界上許多大型的軟硬體公司廣泛、大 量地使用,極為可靠、有效。

事實上,現Perl已成為許多Unix業者所售的作業系統的標準配備了。

而 且如果您無法在詳盡的使用說明,包括這份FAQ之中為您的問題找到解答的話,送封post到新聞討 論群即可。

參見http://www.perl.org/advocacy/ 如果您面對反對perl升級的聲音,那麼告訴他們Perl發展小組已經完全不再維護或支援第四版的 perl了。

perl5的另一個大賣點是它有大量的模組和延伸,可大大減少計畫的發展時間。

還有,告訴他 們第四和第五版Perl之間的差異就如awk和C++的差別一樣(嗯,或許沒有差得那麼明顯,但您知道 我的意思就好)。

如果您想得到支援而且想確保您現在所發展的軟體在未來能繼續工作的話,那麼您得 跑有支援的版本。

在2003年12月,這大概也就是說要跑5.8.2版的,或者稍微舊一些的版本 如5.6.2(November2003釋出;一個修正發行,使得perl5.6在新系統中可以編譯,因為5.6.1發 行早在April2001)或5.005_03(March1999發行),如果你一定要一箇舊版本來保持相容性,使用 5.004_05也不壞。

比5.004_05更舊的版本堅決不能再用 Ofparticularnoteisthemassivebughuntforbufferoverflowproblemsthatwentintothe 5.004release.Allreleasespriortothat,includingperl4,areconsideredinsecureand shouldbeupgradedassoonaspossible. InAugust2000inallLinuxdistributionsanewsecurityproblemwasfoundintheoptional 'suidperl'(notbuiltorinstalledbydefault)inallthePerlbranches5.6,5.005,and 5.004,seehttp://www.cpan.org/src/5.0/sperl-2000-08-05/Perlmaintenancereleases5.6.1 and5.8.0havethissecurityholeclosed.Most,ifnotall,Linuxdistributionhave patchesforthisvulnerabilityavailable,seehttp://www.linuxsecurity.com/advisories/, butthemostrecommendablewayistoupgradetoatleastPerl5.6.1. AUTHORANDCOPYRIGHT Copyright(c)1997,1998,1999,2000,2001TomChristiansenandNathanTorkington.All rightsreserved. Thisdocumentationisfree;youcanredistributeitand/ormodifyitunderthesameterms asPerlitself. Irrespectiveofitsdistribution,allcodeexampleshereareinthepublicdomain.You arepermittedandencouragedtousethiscodeandanyderivativesthereofinyourown programsforfunorforprofitasyouseefit.Asimplecommentinthecodegivingcredit totheFAQwouldbecourteousbutisnotrequired. 譯者 蕭百齡,兩隻老虎工作室 跋 本頁面中文版由中文man手冊頁計劃提供。

中文man手冊頁計劃:https://github.com/man-pages-zh/manpages-zh



請為這篇文章評分?