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 文件上运行此命令。
类 Unix 系统上的 Perl 构建系统从根目录中的 Configure 脚本开始。
构建系统的平台特定部分也存在于平台特定目录中,如 win32/、vms/ 等。Windows 和 VMS 在各自的目录中都有自己的类似于 Configure 的脚本。
Configure 脚本(或类似的平台特定脚本)最终负责从 Makefile.SH 生成 Makefile。
Perl 使用的构建系统称为 metaconfig。该系统与 Perl 核心分开维护,并且了解平台特定的类似于 Configure 的脚本以及 Configure 本身。
metaconfig 系统有自己的 git 存储库。有关更多详细信息,请参阅 https://github.com/Perl/metaconfig 中的 README 文件。
Cross 目录包含与 Perl 交叉编译相关的各种文件。有关更多详细信息,请参阅 Cross/README。
此文件列出了所有为 Perl 做出贡献的人。如果您提交补丁,您应该将您的姓名作为补丁的一部分添加到此文件中。
源代码树根目录中的 MANIFEST 文件包含 Perl 核心中的每个文件的列表以及每个文件的简要说明。
您可以使用以下命令获取所有文件的概述
% perl -lne 'print if /^[^\/]+\.[ch]\s+/' MANIFEST