语言是 5.38.2,不表示每个模块都叫 5.38.2。文件编码用到本机的 Encode 3.19,UTC 日期校验依赖 Time::Local 1.30,POD 帮助用到 Pod::Usage 2.03;它们有各自版本与装配路径。误把 perl -v 当成模块版本锁,安装相同 Perl patch 的机器也可能得到不同模块行为。

自己的 LogTool 设为 0.100。perl -Iexamples/perl-language/lib -e 'use LogTool 0.100; print LogTool->VERSION, "\n";' 输出 0.100、STDERR 空、退出码 0;把要求改成 99,STDOUT 空、STDERR LogTool version 99 required--this is only version 0.100 ...、退出码 255。版本门槛在加载时生效;它只说明某个模块声明的版本不低于要求,不能证明所有输入都能通过或整个依赖图一致。

examples/perl-language/VERSIONS.md 列出 00–22 阶段实际加载的核心模块、一次 LogTool 加载时的 %INC 文件快照及缺点。%INC 里的路径是本次进程已装载文件,不等于构建锁定的完整依赖树。到 23 才新增发行包及隔离安装,先前核心模块不应被写成“已经隔离装过 CPAN”。

练习:发现 Text::CSV 2.06 已装载,是否就能推断它的后端也是固定版本?不能,默认可能选 XS 或 PP;后面要同时记录发行包、后端和可选依赖,在 CLI 中固定预期的后端。正反例及版本身份见 examples/perl-language/evidence/21-25.md;参考 Perl 5.38.2 pod/perlmod.pod(Perl Modules)和本机 Time::Local、Encode、Pod::Usage 的实际版本。