perlsource - Perl 源代碼樹的指南
本文描述了 Perl 源代碼樹的佈局。如果您正在對 Perl 核心進行修改,這將幫助您找到所需的內容。
Perl 源代碼樹很大。以下是您將在其中找到的一些內容
C 源代碼和頭文件大多位於源代碼樹的根目錄中。有一些特定平台的目錄包含 C 語言代碼。此外,一些隨 Perl 一起提供的模塊包含了 C 或 XS 代碼。
有關構成 Perl 解釋器的文件以及其工作原理的詳細信息,請參見perlinterp。
作為 Perl 核心的一部分提供的模塊位於四個子目錄中。其中兩個目錄包含核心模塊,另外兩個目錄包含也可以在 CPAN 上單獨發布的模塊。可以在 CPAN 上發布的模塊被稱為“雙生”模塊。
lib/
此目錄包含僅作為核心的一部分發布的純 Perl 模塊。此目錄包含所有模塊及其測試,與其他核心模塊不同。
ext/
像 lib/ 一樣,此目錄包含僅作為核心的一部分發布的模組。但是,與 lib/ 不同,ext/ 下的模組通常具有 CPAN 風格的目錄和文件佈局,並且擁有自己的 Makefile.PL。不預期 ext/ 下的模組能與 Perl 5 的早期版本一起工作。因此,這樣的模組可以充分利用 Perl 5 blead 中的語法和其他改進。
dist/
此目錄用於雙重生命週期模組,其中 blead 源代碼是正式版本。請注意,此目錄中的某些模組可能尚未單獨在 CPAN 上發布。 dist/ 下的模組應該努力與 Perl 5 的早期版本一起工作。
cpan/
此目錄包含 CPAN 模組是正式版本的雙重生命週期模組。請勿直接對這些模組進行修補!對這些模組的更改應提交給 CPAN 模組的維護者。一旦應用並發布了這些更改,新版本的模組將被合併到核心中。
對於一些雙重生命週期模組,尚未確定 CPAN 版本還是 blead 源代碼是正式版本。在做出決定之前,這些模組應該放在 cpan/ 目錄下。
Perl 核心具有豐富的測試套件。如果您添加新測試(或具有測試的新模組),則可能需要更新 t/TEST 文件以運行這些測試。
模組測試
位於 lib/ 目錄中的核心模組的測試與模組本身相鄰。例如,我們有 lib/strict.pm 和 lib/strict.t。
ext/ 中的模組以及雙重生命週期模組的測試位於每個模組的 t/ 子目錄中,就像標準的 CPAN 發行版一樣。
t/base/
Perl 的絕對基本功能的測試。這包括 if
、基本文件讀取和寫入、簡單正則表達式等。這些測試在測試套件中首先運行,如果其中任何一個失敗,表示出現了嚴重問題。
t/cmd/
基本控制結構的測試,如 if
/else
、while
、子程序等。
t/comp/
有關 Perl 如何解析和編譯本身的基本問題的測試。
t/io/
內置 IO 函數的測試,包括命令行參數。
t/mro/
測試 perl 的方法解析順序實現(參見 mro)。
t/op/
測試 perl 內建函數,不適合放入任何其他目錄。
t/opbasic/
測試 perl 的內建函數,與 t/op/ 中的函數類似,但除此之外,還不能使用 t/test.pl,因為該程式依賴於測試文件本身正在測試的功能。
t/re/
測試與正則表達式相關的函數或行為。(這些以前存放在 t/op 中)。
t/run/
測試 perl 實際運行的功能,包括退出代碼和處理 PERL* 環境變量。
t/uni/
測試 Unicode 的核心支持。
t/win32/
Windows 特定的測試。
t/porting/
測試源代碼樹的狀態,以檢查各種常見錯誤。例如,它會檢查在 git 日誌中列出的每個人是否在 AUTHORS 文件中有相應的記錄。
t/lib/
模組測試的舊家,不應該在這裡放入任何新內容。這裡仍然有一些零散的東西需要移動。也許你可以把它們移到其他地方?謝謝!
所有針對最終用戶的核心文檔都存放在 pod/ 中。在 lib/、ext/、dist/ 和 cpan/ 中的個別模組通常都有自己的文檔,可以在 Module.pm 文件或附帶的 Module.pod 文件中找到。
最後,針對核心 Perl 開發者的文檔存放在 Porting/ 目錄中。
Porting 目錄包含了一組旨在幫助移植者在 Perl 上工作的代碼和文檔。其中一些亮點包括
check*
這些腳本將檢查源代碼中的 ANSI C 違規、POD 編碼問題等。
Maintainers、Maintainers.pl 和 Maintainers.pm
這些文件包含了誰維護哪些模組的信息。運行 perl Porting/Maintainers -M Module::Name
以獲取有關雙生模組的更多信息。
podtidy
整理 pod 文件。對您打補丁的 pod 文件運行這個工具是個好主意。
*nix-like 系統上的 Perl 建置系統始於根目錄中的 Configure 腳本。
建置系統的平台特定部分也存在於特定平台目錄中,如 win32/, vms/ 等。Windows 和 VMS 有各自的 Configure 類似腳本,分別存在於它們各自的目錄中。
Configure 腳本(或類似於特定平台的腳本)最終負責從 Makefile.SH 生成 Makefile。
Perl 使用的建置系統稱為 metaconfig。該系統與 Perl 核心分開維護,並知道有關平台特定 Configure 類似腳本以及 Configure 本身的信息。
metaconfig 系統有自己的 git 存儲庫。請參閱其 README 文件:https://github.com/Perl/metaconfig 以獲取更多詳細信息。
Cross 目錄包含與交叉編譯 Perl 相關的各種文件。請參閱 Cross/README 以獲取更多詳細信息。
此文件列出了所有貢獻給 Perl 的人。如果您提交了補丁,請將您的名字添加到此文件中作為補丁的一部分。
源代碼樹的根目錄中的 MANIFEST 文件包含 Perl 核心中的每個文件的列表,以及每個文件的簡短描述。
您可以使用此命令獲取所有文件的概覽
% perl -lne 'print if /^[^\/]+\.[ch]\s+/' MANIFEST