经过一年的发展 发表 发布 Perl 编程语言的新稳定分支 - 5.44。 在 准备 新版本更改了约 270 行代码(不包括文档和自动生成的代码 - 110 行),更改影响了 860 个文件,71 位开发人员参与了开发。
5.44 分支的发布遵循十三年前制定的固定开发计划,该计划要求每年发布一个稳定分支,每三个月发布一个次要版本。第一个次要版本 Perl 5.44.1 计划在一个月后发布,修复了在 Perl 5.44.0 实现过程中发现的最重要漏洞。随着 Perl 5.44 的发布,对 5.40 分支的支持已经结束;未来只有在发现重大安全问题时才会发布对其的更新。 已开始 除非另有决定,否则实验性 5.45 分支的开发过程将基于该分支,并于 2027 年上半年发布稳定版 Perl 5.46。 过去 编号至 7.x。
钥匙 变化:
- 添加者 在实验中,使用命名参数的可能性 签名 函数定义中,传递给函数的变量列表并非位于函数体中,而是在函数声明期间定义。这项新特性允许参数以任意顺序传递,无需严格按照顺序,使用键值对,语法类似于在哈希表中赋值元素:
- 旧语法:sub f { my ($x, $y) = @_; …} f(1, 2);
- 签名:sub f ($x, $y) { … } f(1, 2);
- 带有命名参数的签名:sub f (:$x, :$y) { … } f(y => 2, x => 1);
- 新增了对在包含多个变量的 foreach 循环中使用别名(指向指针的指针)的实验性支持。此功能允许您在 foreach 循环中创建别名,以便在单次循环迭代中检索多个值。例如,当遍历哈希的键和值时,您可以为哈希元素创建一个别名,该别名指向一个数组:use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "The $key array contains: @items"; } # 在 5.44 版本之前,需要进行解引用:foreach my ( $key, $var ) ( %hash ) { say "The $key array contains: @$var"; } # 不使用实验性的 refalias 和 declared_refs 功能:foreach my $key (keys %hash) { say "$key 数组包含:@{$hash{$key}}"; }
- 在正则表达式中 已实施 实验性的“enhanced_xx”模式允许将 /xx 修饰符与方括号中的字符类 ([a-zA-Z]) 一起使用,以便将其拆分到多行或插入注释。例如,条件 if ($text =~ m/[a-zA-Z]/){ 可以写成:if ($text =~ m/[ a-z # 小写字母 A-Z # 大写字母 ]/xx) {
- 伪随机数生成器使用 getentropy() 系统调用来获取支持它的系统上的熵(Linux,BSD, macOS在其他系统中,熵是通过读取 /dev/urandom 设备或使用时间、进程 ID 和指针值的哈希值来获得的。
- 增加了规范支持 Unicode 17.0.
- 标识符名称和正则表达式组已严格遵守 Unicode 规则,之前由 w 类覆盖的约 160 个 Unicode 字符现已禁用。例如,w 类涵盖所有字母、数字和下划线字符,现在已排除带圆圈的拉丁字母,这些字母虽然看起来像真正的字母,但实际上并非字母。此行为变更仅影响使用 utf8 模式的程序。
- 修复了 Perl_study_chunk 函数中由缓冲区溢出引起的漏洞(CVE-2026-8376(出现在 32 位程序集中)和 S_measure_struct(CVE-2026-57432),以及正则表达式引擎中 16 位计数器的溢出(CVE-2026-13221这可能会导致正则表达式失败。
- 禁止使用 goto 运算符跳转到循环和代码块内的特定位置。此功能已于 2010 年弃用。
- 性能优化旨在加快整数加法、减法和乘法运算、函数签名处理以及使用编译时已知的字符串键从键/值列表填充哈希表的速度。
来源: linux.org.ru
