这是关于 Perl 5.42.0 版本的详细说明,包含了众多方面的变化和更新:
- 名称与描述:
perldelta
介绍了 perl v5.42.0 与 v5.40.0 版本的差异。 核心增强:
- 新增
chdir
作为CORE::
命名空间的子例程。 - 引入新的
[source::encoding](https://perldoc.perl.org/5.42.0/source::encoding)
pragmata 来声明程序部分的编码。 - 为字段变量添加
:writer
属性以自动创建写访问器。 - 新增
any
和all
操作符,类似于grep
但更高效。 - 可禁用单引号作为全局名称分隔符的功能。
- 支持 lexical 方法声明和调用操作符
->&
。 - 保留
switch
和Smart Match
操作符,但需通过 feature 启用。 - 支持 Unicode 16.0。
- 添加逻辑异或赋值操作符
^^=
。
- 新增
安全方面:
- 修复了
tr//
的堆缓冲区溢出漏洞(CVE-2024-56406)。 - 解决了 Perl 线程的工作目录竞争条件问题(CVE-2025-40909)。
- 修复了
- 不兼容变化:恢复了 Perl 5.18 中引入的函数对包含函数的无条件引用,修复了内存泄漏问题,但也可能影响调试器。
性能增强:
- 常量折叠字符串可通过 Copy-on-Write 机制共享。
tr///
在处理 ASCII 范围内字符时速度提升。- 优化了
builtin::indexed
的使用。 - 引入新的专用
OP_SUBSTR_LEFT
操作符处理零偏移substr
模式。 - 提升了整数字符串化的效率。
- 单参数字符串反转速度更快。
- 模块与 pragmata:更新了众多模块和 pragmata,如
Archive::Tar
、B::Deparse
等。 - 文档更新:更新了多个文档部分,如
perlapi
、perldata
等,以反映版本变化。 诊断方面:
- 新增错误和警告信息,如使用非 ASCII 字符时的错误等。
- 更改了一些现有诊断的输出。
- 工具变化:
Porting/test-dist-modules.pl
的默认安装方式变为分离安装,且文档增强。 - 配置与编译:修复了在特定平台上的编译问题,移除了一些未文档化的配置宏。
- 测试方面:添加和修改了测试用例,新增
t/run/todo.t
测试脚本,测试 perl 头文件与编译器的兼容性。 - 平台支持:针对不同平台(如 arm64 Darwin、Android、Cygwin、MacOS 等)进行了特定的调整和修复。
- 内部变化:引入新的 API 函数,如处理 UTF-8 的函数、操作 regexp 全局匹配位置的函数等,同时对一些内部代码的处理方式进行了更改。
- 修复的 Bug:修复了众多 Bug,包括空指针引用、
chdir
返回值类型、复合赋值操作符等方面的问题。 - 讣告:提及 Abe Timmerman 和 Andrew Main 的去世,他们在 Perl 社区中做出了贡献。
- 致谢:感谢众多贡献者参与 Perl 5.42.0 的开发,包括作者、CPAN 社区等。
- 报告 Bug:提供了报告 Bug 的途径,包括查看 perl bug 数据库、在 GitHub 上创建 issue 等。
- 感谢与参考:提供了感谢 Perl 5 Porters 的方式,以及其他相关参考文件(如
Changes
、INSTALL
、README
等)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。