perlfaq1 - Perl 關於一般問題
版本 5.20210520
常見問題的這一部分回答了關於 Perl 非常一般、高階的問題。
Perl 是一種高階程式語言,由 Larry Wall 和成千上萬的人共同撰寫,具有折衷的傳統。
Perl 的處理程序、檔案和文字處理工具使其特別適合於快速原型製作、系統工具、軟體工具、系統管理任務、資料庫存取、圖形程式設計、網路和網頁程式設計等任務。
Perl 源自無所不在的 C 程式語言,在較小程度上源自 sed、awk、Unix shell,以及許多其他工具和語言。
這些優勢讓它特別受到 Web 開發人員和系統管理員的歡迎。數學家、遺傳學家、記者、經理人,以及許多其他人也使用 Perl。
前民粹主義網路的原始文化,以及 Perl 作者 Larry Wall 的根深蒂固信念,促成了 Perl 的免費和開放發行政策。Perl 由其使用者提供支援。核心、標準 Perl 函式庫、選用模組,以及您現在正在閱讀的文件,都是由志工撰寫的。
核心開發團隊(稱為 Perl Porters)是一群高度利他主義的個人,致力於免費製作比您能用金錢購買的更好的軟體。您可以透過 檔案 窺探正在開發中的內容,或者您可以透過寄送訂閱要求(空白訊息,沒有主旨即可)至 perl5-porters-subscribe@perl.org 來訂閱郵件清單。
儘管 GNU 專案在其發行版中包含 Perl,但沒有所謂的「GNU Perl」。Perl 不是由自由軟體基金會製作或維護的。Perl 的授權條款也比 GNU 軟體的條款更開放。
如果您願意,您可以獲得 Perl 的商業支援,儘管對大多數使用者而言,非正式支援已綽綽有餘。請參閱「我在哪裡可以購買 Perl 的商業版本?」的解答以取得更多資訊。
(由 brian d foy 撰寫,並由其他人更新)
這通常是見仁見智的事,沒有任何答案適合所有人。一般來說,您會想要使用目前的穩定版本,或緊接在該版本之前的穩定版本。
除此之外,您必須考慮幾件事,並決定哪個最適合您。
如果沒有問題,升級 perl 可能會造成問題(或至少會發出新的警告)。
最新版本的 perl 有更多的錯誤修正。
最新版本的 perl 可能包含舊版本中沒有的效能改善和功能。自 perl5 首次推出以來,perl 已有許多變更。
Perl 社群傾向於支援最新的版本,因此您會比較容易找到對這些版本的協助。
最新版本可能是最少人部署和廣泛測試的,因此如果你風險規避,你可能想要在它們發布後等幾個月,看看其他人遇到了什麼問題。
除了當前的穩定版本外,還會維護前一個穩定版本。有關更多資訊,請參閱perlpolicy 中的「維護和支援」。
Perl 開發實際上有兩條軌道:維護版本和實驗版本。維護版本是穩定的,次要版本是偶數(例如 perl5.24.x,其中 24 是次要版本)。實驗版本可能包含未納入穩定版本的特性,次要版本是奇數(例如 perl5.25.x,其中 25 是次要版本)。
你可以查閱版本來確定 Perl 的當前穩定版本。
簡而言之,Perl 4 是 Perl 5 和 Raku(以前稱為 Perl 6)的父代。Perl 5 是較年長的兄弟,儘管它們是不同的語言,但會一種語言的人會在另一種語言中發現許多相似之處。
Perl 後面的數字(例如 Perl 5 後面的 5)是 perl 解譯器的主要版本,也是語言的版本。每個主要版本都有早期版本無法支援的重大差異。
Perl 的當前主要版本是 Perl 5,於 1994 年首次發布。它可以執行前一個主要版本 Perl 4(1991 年 3 月)的腳本,但有重大差異。
Raku 是 Perl 的再創造,一種具有相同血統但不相容的語言。兩者是互補的,而不是相互排斥的。Raku 沒有打算取代 Perl,反之亦然。請參閱以下「Raku(Perl 6)是什麼?」以了解更多資訊。
請參閱perlhist以了解 Perl 修訂的歷史。
Raku(以前稱為 Perl 6)最初被描述為社群對 Perl 的重寫,然而隨著語言的演進,很明顯它是一種獨立的語言,但與 Perl 屬於同一個語言家族。
Raku 主要不是打算取代 Perl,而是作為它自己的東西——而且存在函式庫允許你從 Raku 程式呼叫 Perl 程式,反之亦然。
與普遍的看法相反,Raku 和 Perl 和平共存。Raku 已被證明是對使用 Perl 的人來說一個引人入勝的想法來源(Moose 物件系統是一個著名的範例)。社群之間有重疊,而這種重疊培養了對 Perl 成功至關重要的分享和借用傳統。
有關 Raku 的更多資訊,請參閱 https://www.raku.org/。
「我們非常認真地重新發明所有需要重新發明的事物。」--Larry Wall
包含錯誤修正和新功能的正式版本在發布前會廣泛測試。自 5.000 版本以來,我們平均每年發布一個正式版本。
Perl 開發團隊偶爾會對語言的內部核心進行變更,但會盡一切努力維持向後相容性。
最近的計畫是每年的 4 月左右發布一個新的 Perl 版本,但發布正確的版本比嚴格遵守行事曆日期更重要,因此發布日期有些彈性。可以在 http://www.cpan.org/src/README.html 查看歷史發布日期。
偶數次要版本(5.14、5.16、5.18)是正式版本,奇數次要版本(5.15、5.17、5.19)是開發版本。除非您想要試用實驗性功能,否則您可能永遠不想安裝 Perl 的開發版本。
Perl 開發團隊稱為 Perl 5 Porters,其組織說明於 https://perldoc.dev.org.tw/perlpolicy.html。組織規則實際上只歸結為一個:Larry 永遠是對的,即使他錯了。
不,Perl 很容易開始 學習,而且很容易持續學習。它看起來像您可能已經有經驗的大多數程式語言,因此如果您曾經撰寫過 C 程式、awk 指令碼、shell 指令碼,甚至 BASIC 程式,您已經完成一半了。
大多數任務只需要 Perl 語言的一小部分子集。Perl 開發的指導座右銘之一是「有不止一種方法可以做到」(TMTOWTDI,有時發音為「tim toady」)。因此,Perl 的學習曲線很平緩(容易學習)且很長(如果您真的想要,可以做很多事情)。
最後,由於 Perl 通常(但並非總是,而且肯定不是根據定義)是一種直譯式語言,您可以撰寫程式並在沒有中間編譯步驟的情況下測試它們,讓您可以快速且輕鬆地進行實驗和測試/除錯。這種實驗的容易性更進一步地降低了學習曲線。
讓 Perl 變得更容易學習的事物:Unix 經驗、幾乎任何類型的程式設計經驗、了解正規表示式,以及理解他人程式碼的能力。如果您需要完成某件事,那麼它可能已經完成了,而且通常可以免費取得一個可用的範例。別忘了 Perl 模組。它們在這個常見問題解答的第 3 部分中討論,以及第 2 部分中討論的 CPAN。
Perl 可用於幾乎任何編碼問題,甚至需要整合專家 C 程式碼以提高速度的問題。與任何工具一樣,它可以用得好或用得不好。Perl 有許多優點,也有一些缺點,哪些領域好、哪些領域不好通常取決於個人選擇。
在選擇語言時,您還應該受到其周圍的 資源、測試文化 和 社群 的影響。
對於與特定語言的比較,通常最好使用兩種語言建立一個小型專案並比較結果,請務必使用每種語言的所有 資源,因為語言遠不止其語法。
Perl 具有足夠的彈性和可擴充性,讓您幾乎可以在任何任務中使用它,從一行檔案處理任務到大型精密的系統。
對許多人來說,Perl 可作為 shell 指令碼的絕佳替代品。對其他人來說,它可以方便地高階替代他們會用 C 或 C++ 等低階語言編寫的大部分程式。最終由您(以及您的管理階層)決定您將使用 Perl 執行哪些任務,以及哪些任務不使用。
如果您有一個提供 API 的函式庫,您可以使用以 C 或 C++ 編寫並動態連結到您的 Perl 主解釋器的 Perl 延伸模組,將其任何組件作為另一個 Perl 函式或變數提供。您也可以反其道而行,使用 C 或 C++ 編寫您的主程式,然後在執行時連結一些 Perl 程式碼,以建立一個強大的應用程式。請參閱 perlembed。
話雖如此,總會有一些小型的、專注的、專門語言專門針對特定問題領域,而這些語言對於某些類型的問題來說更為方便。Perl 嘗試成為所有人的萬能工具,但對任何人來說都不是特別的。想到的專門語言範例包括 Prolog 和 Matlab。
一個很好的理由是,當你已經有另一個語言寫好的現有應用程式,而且已經完成(而且寫得很好),或者你有一個專門為某項任務設計的應用程式語言(例如 Prolog、make)。
如果你發現需要加快 Perl 應用程式特定部分的速度(這不是你經常需要的),你可能想要使用 C,但你可以透過 perlxs 從 Perl 程式碼存取它。
「Perl」是語言的名稱。只有「P」是大寫。直譯器(執行 Perl 指令碼的程式)的名稱是「perl」,「p」是小寫。
你可能會選擇遵循此用法,也可能不會。但永遠不要寫「PERL」,因為 perl 不是縮寫。
(由 brian d foy 提供)
JAPH 代表「Just another Perl hacker(只是一個 Perl 駭客)」,Randal Schwartz 從 1980 年代後期開始用它來簽署電子郵件和 Usenet 訊息。他之前在許多主題中使用這個詞組(「Just another x hacker(只是一個 x 駭客)」),因此為了區分他的 JAPH,他開始將它們寫成 Perl 程式。
print "Just another Perl hacker,";
其他人也開始這麼做,並開始撰寫聰明或模糊的程式來產生相同的輸出,讓事情迅速失控,同時仍為他們的創作者和讀者帶來數小時的娛樂。
CPAN 在 http://www.cpan.org/misc/japh 有幾個 JAPH 程式。
(由 brian d foy 提供)
訴諸他們的自利!如果 Perl 對他們來說是新的(因此很可怕),請找到 Perl 可以解決他們問題之一的方法。這可能意味著 Perl 可以為他們節省一些東西(時間、頭痛、金錢)或給他們一些東西(彈性、能力、可測試性)。
一般來說,語言的優點與使用該語言的人的技能息息相關。如果您或您的團隊透過 Perl 變得更快、更好、更強大,您將提供更多價值。請記住,人們通常對他們從中獲得的回報反應較好。如果您遇到阻力,請找出那些人從其他選擇中獲得什麼,以及 Perl 如何滿足該需求。
您不必擔心尋找或支付 Perl;它可以免費取得,而且多個熱門作業系統都附帶 Perl。在 Perlmonks ( http://www.perlmonks.com ) 和各種 Perl 郵件清單 ( http://lists.perl.org ) 等地方的社群支援表示,您通常可以快速得到問題的解答。
最後,請記住 Perl 可能並非每項工作的合適工具。如果您提出的主張合理且基於現實,您將會成為更好的倡導者。武斷地主張任何事情往往會讓人們忽視您的訊息。對於您選擇 Perl 的可能缺點要誠實,因為任何選擇都有取捨。
您可能會覺得這些連結很有用
著作權 (c) 1997-2010 Tom Christiansen、Nathan Torkington 和其他註明的作者。保留所有權利。
此文件是免費的;您可以在與 Perl 相同的條款下重新散布或修改它。
無論如何散布,這裡的所有程式碼範例都是公有領域。您被允許且鼓勵在您自己的程式中使用此程式碼和任何衍生品,以供娛樂或營利,視您所見為宜。在程式碼中加上一個簡單的註解,說明此常見問題解答的出處會很客氣,但並非必要。