Perl粉丝们期待的Perl6也许脚步变得近了。

本周Perl发布了 5.34.0 版(https://metacpan.org/release/XSAWYERX/perl-5.34.0),可以供开发者们下载。

https://www.perl.org/get.html。

这版本可能是近年新功能、性能增强、错误修复和改进最多的一个版本,这可能是15年来最让人惊喜的事情。

下面我们就来看看Perl的近期发展历史。

Perl 5.10(2007年)

https://perldoc.pl/perl5100delta

这是一个非常重要的版本。它是在上一个版本5.8五年后才发布的版本。

这并不是说Perl开发人员比较闲,但确实说,到了5.14版本,Perl语言才稳定的每年至少发布一版。

Perl的历史较长,此版本做了些核心增强,主要增加的还是实用性,有新语法的增加,但又不能破坏Perl向后兼容性。

Perl5.10引入了定义运算符(//),保留先前值的state变量,在输出中自动增加换行符的say函数,还有大量正则表达式的改进。

此版本还引入的智能匹配功能(~~),后来被降为实验版。

Perl 5.12(2010)

https://perldoc.pl/perl5120delta

Perl 5.12添加很多新功能。比较重大的是“可插入关键字”的支持,即允许作者能够大不修改内核的情况扩展语言本身。在之前,人们使用函数,Hacky过滤器以及废弃的Devel::Declare来模拟此功能。

CPAN作者会继续创建各种新的语法,以创建更方便利用核心的原型功能。

Perl 5.18(2013)

https://perldoc.pl/perl5180delta

Perl 5.18加入了smartmatch实验,以及$_变量。随之而来的是一种新的实验功能:警告功能和覆盖警告的方法。

与安全和安全主题相适应,对哈希进行改革和随机化顺序处理,从而提高了对算法复杂性攻击的抵抗力。

Perl 5.20(2014)

https://perldoc.pl/perl5200delta

在2014年,Perl 5.18推出了三个语法特性:实验性子程序签名,键/值哈希数组切片,索引数组切片,另外还包括实验性的后缀解引用(https://perldoc.pl/perl5200delta#Experimental-Postfix-Dereferencing)。

类似这样的语法:

@{ $array_ref } 变成 $array_ref->@*
%{ $hash_ref } 变成 $hash_ref->%*

Perl 5.22(2015)

说到子程序签名,它们的位置移动到子程序名称和属性列表之间。在之前版本中它们是在属性之后。

该版本除了性能增强、安全更新、性能修复,它还删除了一个过去很著名的CGI模块(https://perldoc.pl/perl5220delta#Deprecations),该模块在1997年添加到内核中,该模块被CPAN上新的模块(https://metacpan.org/pod/CGI::Alternatives)替代。

Perl 5.26(2017)

该版本又加了新实验功能,支持了新的子程序语法。令人赞赏的是它增加的可读性增强,如文档缩进;字符类制表符和空格,正则表达式修饰,支持  @{^CAPTURE}, %{^CAPTURE}, and%{^CAPTURE_ALL}等类似的文档修饰符。

Perl 5.28(2018年)

实验性子程序签名以及属性排序倒转。Perl 5.20属性签名序列。

Perl 5.30(2019)

此版本为迁移到Perl的AWK和Fortran程序员提供了可能。

Perl 5.32(2020)

2020年,Perl开发转移到了Github。此次,该语言强化了可读性。

增加了isa操作符如下:

if ( $obj isa Some::Class ) { ... }
实例化处理:

use Scalar::Util 'blessed';

if ( blessed($obj) and $obj->isa('Some::Class') { ...

可以使用链式比较操作符,比if语句(if ( $x < $y <= $z ) {...} rather than if ( $x < $y and $y <= $z ) {...})更简洁。