Perl 5.38 发布


Perl 5.38 已正式发布,以下为此版本部分新特性:

新 class 功能

现在可以使用新的实验性语法来定义对象类,其中每个实例的数据存储在行为类似于词汇的“字段”变量中。

use feature 'class';
 
class Point
{
field $x;
field $y;
 
method zero { $x = $y = 0; }
}

这是一个新的实验性功能,并且仍在开发中。

支持 Unicode 15.0

有关 Unicode 15.0 的详细信息,请参阅 https://www.unicode.org/versions/Unicode15.0.0/

弃用警告有特定的子类别

所有弃用警告现在都有自己特定的弃用类别,可以单独禁用。可以在 perldeprecation 和警告中查看所有已弃用功能的列表。

+- deprecated ----+
| |
| +- deprecated::apostrophe_as_package_separator
| |
| +- deprecated::delimiter_will_be_paired
| |
| +- deprecated::dot_in_inc
| |
| +- deprecated::goto_construct
| |
| +- deprecated::smartmatch
| |
| +- deprecated::unicode_property_name
| |
| +- deprecated::version_downgrade

仍然可以在单个语句中禁用所有弃用警告

no warnings 'deprecated';

但现在可以进行更细粒度的控制,这些警告会自动启用

use warnings;

%{^HOOK} API 引入

引入了一个名为 %{^HOOK} 的新哈希,当关键字支持任何类型的特殊 hook 时,该 hook 将存在于这个新的哈希中。此哈希中的 hook 将以调用它们的函数命名,后跟两个下划线,然后是它们执行的阶段,当前是在执行关键字之前或之后。

此初始版本支持两个 hooks:require__before 和 require__after ,可更轻松地在 require 语句之前和之后执行任务。

有关详细信息,请参阅 perlvar 

PERL_RAND_SEED

添加了一个新的环境变量 PERL_RAND_SEED ,可用于导致 Perl 程序使用 rand 而不显式使用 srand() 或使用 srand() 没有可重复的参数。详情参见 perlrun。

可以在编译时通过传递禁用此功能

-Accflags=-DNO_PERL_RAND_SEED

在构建过程中进行配置。

签名中的定义或和逻辑或赋值默认表达式

现在可以使用 //=  ||= 运算符分配子例程签名参数的默认表达式,以便在调用者(分别)提供未定义或 false 值时应用默认值,而不仅限于当参数完全丢失时。

有关更多详细信息,请参阅 perlsub 中的文档。

@INC Hook 增强功能以​​及 $INC 和 INCDIR

@INC hook 的内部结构已得到强化,可以处理各种边缘情况,且当 hook 在 require 操作期间修改 @INC 时,不再出现段错误或抛出断言失败。现在确保任何给定的钩子在 require 调用期间最多执行一次,并且任何重复的目录不会触发额外的目录探测。

为了更好地控制动态模块查找,现在支持新的 hook 方法 INCDIR 。支持该方法的对象可以被注入到 @INC 数组中,当模块搜索过程中遇到它时就会执行它,就像 INC hook 的执行方式一样,其返回值作为列表使用用于搜索模块的目录。返回空列表相当于无操作。

@INC 中不支持 INC  INCDIR 方法的 Blessed CODE 引用将不再触发异常,而是被视为与 Unblessed coderef 相同,并像 INC hook 一样执行。

REG_INF 已从 65,536 增加到 2,147,483,647

许多正则表达式量词过去仅限于 U16_MAX ,但现在仅限于 I32_MAX ,因此现在可以编写 /(?:word){1000000}/ 。请注意,这样做可能会导致正则表达式引擎运行时间更长并使用更多内存。

defer 和 finally 块中允许某些 goto

Perl 版本 5.36.0 添加了 defer 块,并允许 finally 关键字添加与 try / catch 语法类似的行为。但不允许主体内有任何 goto 表达式,因为它可能导致控制流跳出块。

现在,部分goto 表达式已被允许添加,如果它们具有恒定的目标标签,并且该标签可在块中找到。

use feature 'defer';
 
defer {
goto LABEL;
print "This does not execute\n";
LABEL: print "This does\n";
}

 

以上为部分重点更新功能,完整的功能变更和弃用/修复,可在官方公告中查看。


相關推薦

2022-06-01

Perl 5.36 发布啦,这是自 Perl 5.34.0 以来大约一年的大版本更新,带来了多项便利的新功能。比如新引入的 use x.xx  功能省略了代码顶部繁琐的功能模块声明,其次稳定了布尔跟踪、正则表达式集、支持 Unicode 14.0 等功能,还新

2022-06-22

历经一年多的开发,mojo.js 终于发布了首个主要版本 1.0。 mojo.js 是 Node.js 实时 Web 框架,可将它视作采用 TypeScript 重写的 Mojolicious(Mojolicious 是 Perl 开发的 Web 框架)。mojo.js 使用了所有最新的 JavaScript 特性,专为聚焦超媒体

2021-12-07

017 年的一项研究,以及今年的补充研究中表明,Python 和 Perl 在一众参考对象中是不够环保和节能的编码语言。 我们先来说说 2017 年的研究。葡萄牙 Universidade do Minho 大学的研究人员在当时的研究中发现,就执行某些特定任

2023-03-08

OBE 3 月 TOP 20 编程语言 相比上个月的 TOP 20 榜单,本月 Perl 跌出榜单,填补 Perl 位置的则是排名第 17 的 Fortran。 Top 20 其他语言的一些排名变化: C++ 的排名从第 3 跌至第 4; Java 的排名刚好相反,从第 4 升至第 3; PHP 从

2022-12-16

! Bugzilla 还没有死。 :-) 几个月前我在开发者邮件列表中发布了一堆这样的内容,但现在是时候让更多的人看到了。:-) Bugzilla 最初是由开发者 Terry Weissman 于 1998 年为 Mozilla.org 项目设计开发的,一个基于 Web 的通用 bug 跟踪系

2022-05-21

面向 64 位 Intel、64 位 AMD (x86_64) 和 64 位 Arm (aarch64) 平台发布。 该版本引入了对 OpenSSH 服务器的插入式配置文件支持、用于自动解锁 LUKS 加密驱动器的基于策略的解密 (PBD) ,并提供了许多增强功能,包括: 软件管理 模块同

2022-05-18

XAMPP 发布更新了,官方为所有平台发布了支持最新 PHP 系列的 XAMPP 新版本;其中包括 PHP 7.4.29、8.0.19 和 8.1.6。 下载地址:https://www.apachefriends.org/zh_cn/download.html 安装包提供了以下组件: PHP 7.4.29 , 8.0.19 , 8.1.6 Apache 2.4.53 M

2022-07-14

Git for Windows 2.37.1 现已发布,主要更新内容如下: New Features 随附 Git v2.37.1。 随附 OpenSSL v1.1.1q。 随附 Git Credential Manager Core v2.0.785。 随附 tig v2.5.5。 Bug 修复 在 Windows Terminal 中运行时,在 Git for Windows

2023-01-21

者生态系统调查《The State of Developer Ecosystem 2022》结果已发布。超过 38,000 名开发者参与了去年的调查,报告基于其中 29,000 人的反馈,大约 91% 的受访者是男性;深入探讨了开发者生态系统的各种主题。 调查发现的一些关键要

2021-11-11

HP在安全、性能等方面已经有了很大的提高,尤其是PHP7的发布,PHP已经有了质的飞越。已经有很多的大型网站都是使用了PHP开发的。在网站做大做强的过程中,也不在单纯只依赖一种语言,而使多种语言配合使用,比如某公司的

2023-05-06

le、Tex 等)或任何其他类型的纯文本。 CotEditor 4.5.5 正式发布,该版本更新内容如下: 系统要求 macOS 12 及以上版本 新功能 新增 Mojo 语法样式 修复 解决了 "保持在顶部" 功能在 Stage Manager(台前调度)模式下阻止

2023-02-08

le、Tex 等)或任何其他类型的纯文本。 CotEditor 4.4.5 正式发布,该版本更新内容如下: 系统要求 macOS 12 及以上版本 新功能 在打印页眉/页脚选项中增加 "最后修改日期" 选项 在行尾不一致的提示中增加 "忽略" 选项

2022-07-06

le、Tex 等)或任何其他类型的纯文本。 CotEditor 4.3.1 正式发布,该版本更新内容如下: 系统要求: macOS 11 及以上版本 新功能 在 Text > Lines 子菜单中增加新的 Shuffle 命令 改进 优化编辑器拆分的性能 避免大文件

2023-01-15

le、Tex 等)或任何其他类型的纯文本。 CotEditor 4.4.4 正式发布,该版本更新内容如下: 系统要求 macOS 12 及以上版本 改进 优化了查找/替换所有命令的性能 增加了搜索结束后的视觉反馈 启用 Tab 键浏览查找窗口中的