NetAddr::IP 试用版发布
内容提要
NetAddr::IP 模块迎来新维护者和试用版 4.080_01,修复三处破坏性变更:IPv6 的 re() 不再生成无效正则,re6() 改用非捕获组,new(undef) 返回 undef。同时弃用 :rfc3021 标签,修复 coalesce、new6() 等长期漏洞,并现代化测试套件。
延伸解读
破坏性变更的本质:修复而非倒退
本次试用版列出的三处破坏性变更,实际上都是修正了长期存在的错误行为。例如,IPv6 对象的 re() 不再生成无效正则,re6() 改用非捕获组,new(undef) 不再返回默认路由。这些改动意味着,如果你的代码依赖旧行为,它本身就已经存在缺陷,只是尚未暴露。升级时需留意这些修正可能影响现有逻辑。
弃用 :rfc3021 与 /31、/127 处理
导出标签 :rfc3021 被弃用,同时 hostenum 和 hostenumref 现在对 /31 和 /127 无条件返回 2 个主机,以符合 RFC 规范。此外,无用的 $rfc3021 变量已被移除。如果你的代码使用了该标签或依赖旧的主机计数方式,需要调整以避免兼容性问题。
长期漏洞修复与行为调整
此版本修复了多个长期漏洞,包括 coalesce 现在统计子网地址而非可用主机、支持子类对象、并对错误输入报错;new6() 对双栈主机名优先使用 AAAA 记录,对仅 IPv4 主机返回兼容格式;:nofqdn 导入标签终于生效;canon/short 按 RFC 5952 压缩首个等长零段。这些改动可能改变原有输出,升级前建议测试相关功能。
测试套件现代化与试用建议
整个测试套件(157 个文件,近 3000 个测试)已从定制 TAP 输出转换为 Test2::V1,并在 Perl 5.14 至 5.42 的 Linux 和 macOS(Intel 与 ARM)上通过,同时覆盖 XS 和纯 Perl 代码路径。作为试用版,建议通过 cpanm 安装或克隆仓库进行测试,若发现回归问题,请在 GitHub 上提交 issue,以帮助改进稳定版。
Q&A
NetAddr::IP 4.080_01 有哪些破坏性变更?
有三个破坏性变更:1) IPv6 对象在 IPv4 空间调用 re() 不再生成无效正则;2) re6() 现在返回非捕获组 (?:...);3) new(undef) 返回 undef 而不是默认路由 0.0.0.0/0。这些变更修复了旧行为中的错误。
NetAddr::IP 的 :rfc3021 标签为什么被弃用?
:rfc3021 导出标签已弃用,因为 hostenum/hostenumref 现在无条件为 /31 和 /127 返回 2 个主机,符合 RFC 3021。同时移除了无用的 $rfc3021 变量。
NetAddr::IP 修复了哪些长期存在的 bug?
修复了多个长期 bug,包括:coalesce 现在计数子网地址而非可用主机;coalesce 可作用于子类对象;coalesce 验证参数并在错误输入时 croak;new6() 对双栈主机名优先使用 AAAA 而非 A;new6() 对仅 IPv4 主机返回兼容形式;:nofqdn 导入标签现在正常工作;canon/short 根据 RFC 5952 压缩第一个等长零段。此外还有 neg/abs 重载、括号表示法修复等。
NetAddr::IP 的测试套件做了哪些现代化改进?
整个测试套件(157 个文件,近 3000 个测试)从定制的 TAP 输出转换为 Test2::V1。测试现在可在 Perl 5.14 到 5.42 上干净运行,覆盖 Linux 和 macOS(Intel 和 ARM)。XS 和纯 Perl 代码路径都在 CI 中覆盖。
如何安装 NetAddr::IP 的试用版 4.080_01?
可以使用 cpanm 安装:cpanm DJZORT/NetAddr-IP-4.080_01.tar.gz。或者克隆仓库:git clone https://github.com/cpan-authors/perl-NetAddr-IP.git,然后 cd perl-NetAddr-IP 并运行 dzil test。
如果发现 NetAddr::IP 试用版有回归问题,应该怎么做?
如果发现回归问题,请在 GitHub 上提交 issue。更多的测试报告有助于稳定版的发布。