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";
}

 

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

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/247832/perl-5-38-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。