Perl 37:distribution 声明依赖,还得解包跑测试
前 36 篇的工具一直从工作树执行。要交付一个 Perl distribution,不能仅压缩 lib/ 并说“别人可以用”;至少要有模块版本、脚本清单、运行期/测试期依赖与能从发行包重新执行的测试。示例 Makefile.PL 用 ExtUtils::MakeMaker 7.70 声明 distribution 名 LogTool,版本取自 LogTool::Course 0.200,同时安装 bin/logtool 与 legacy bin/logtool.pl,本机只验证过的最低运行目标 5.38.2,以及核心模块与 Text::CSV >= 2.06、Text::CSV_XS 1.64、DBI 1.655、DBD::SQLite 1.78 与 Moo 2.005005。最低版本字段是本系列的测试范围边界,不是其他 Perl 构建都已复验的声明。
在 /tmp 的工作树副本先用仓库隔离安装的 vendor/lib/perl5 配置,生成 MANIFEST、再 make dist;对得到的 发行练习包 校验 SHA-256 c6616daa3203f8b0487c7f807c4a508c443f1f15702d9cd60bd96d52a5cbbff0,解开到全新目录,重新配置、make test,最后 make install 到另一个隔离路径。解包测试覆盖累计工具的金标和拒绝输入;配置依赖检查成功不替代运行测试。当前发行练习包只包含纯 Perl Text::CSV 的 vendor/lib、vendor/Text-CSV-2.06.tar.gz 和 vendor/dist/ 的 CPAN 源码包;机器编译出的 vendor/perl-5.38.2-local 不进入发行包。安装版 CLI 的 XS/DBI/Moo 依赖仍需从源码包独立安装到同一个隔离目录,并设置 PERL5LIB 才能运行。若将来要上传 CPAN,应另行审计许可、清单、提供物与不用本仓库 vendor 的干净安装,本系列没有上传。
反例不只是手写一个错误 META:在未更新 t/21-25-modules-and-tap.t 对 CLI 的帮助金标时,一次实测解包的 make test 在 9 个文件、152 项断言中失败 1 项(help usage 新增了 report-file);因此发行包构建成功不能当作验收通过。修复金标后重新制作、解包、安装,执行结果与命令见 examples/perl-language/evidence/32-39.md。练习:能否用 make dist 的成功码替代 make test?不能,刚才失败恰好发生在能生成 tar 之后。参考 Perl 5.38.2 pod/perlmodlib.pod 和本机 ExtUtils::MakeMaker 7.70 文档。
依赖安装脚本是 tools/install-course-dependencies.pl。它只读取 vendor/dist/ 中固定 SHA-256 的 CPAN 源码包,按 DBI、DBD::SQLite、Moo 依赖链和 Text::CSV_XS 顺序编译到调用者给出的 --prefix;编译出的 vendor/perl-5.38.2-local 是本机验证前缀,不进入可移植源码包。安装后的 CLI 需要把发行安装目录、依赖前缀和仓库纯 Perl vendor 目录放进 PERL5LIB;本次从非源码目录 /private/tmp 执行安装版 CLI,%INC 显示 LogTool/Course.pm 命中 /private/tmp/perl-course-dist-final-6708/install/lib/perl5/LogTool/Course.pm;随后 bin/logtool --version 输出 LogTool::Course 0.200 Perl v5.38.2,并完成 import/query/report 全链路。









