Perl 5.36 已发布,终于不用写一堆 “use feature” 了
Perl 5.36 发布啦,这是自 Perl 5.34.0 以来大约一年的大版本更新,带来了多项便利的新功能。比如新引入的 use x.xx 功能省略了代码顶部繁琐的功能模块声明,其次稳定了布尔跟踪、正则表达式集、支持 Unicode 14.0 等功能,还新增了内置函数、单次迭代多个值、try
/catch
语法支持finally
关键字等实验性功能。
下面来介绍一下该版本的主要功能改动:
use v5.36 版本包捆绑功能
Perl 5.36.0 稳定了版本包捆绑(Version bundles)功能,解决了 Perl 被诟病已久的 “样板文件” 问题。
该功能只需将这一行放在代码顶部:
use v5.36;
这一行相当于以前的:
require v5.36; use strict; use warnings; use feature 'say'; use feature 'state'; use feature 'current_sub'; use feature 'fc'; use feature 'lexical_subs'; use feature 'signatures'; use feature 'isa'; use feature 'bareword_filehandles'; use feature 'bitwise'; use feature 'evalbytes'; use feature 'postderef_qq'; use feature 'unicode_eval'; use feature 'unicode_strings'; no feature 'indirect'; no feature 'multidimensional';
也就是说,版本包捆绑功能,让开发者使用简单的 use + 版本号; 语句即可达成以下效果:
- 告诉 perl 解释器和人类读者,当前代码需要 perl 5.36.0 或更高版本才能运行;
- 支持当前版本 Perl 提供的所有非实验性功能;
- 使用许多已被广泛实践过的编译指示。
具体到细节,Perl 5.36 版本捆绑的包启用了signatures
子程序签名功能、 isa 运算符功能(详情参阅 perlop 中的“类实例运算符”)。禁止了 indirect(间接)和 multidimensional(多维)功能,意味着禁止使用“间接”方法调用(如 $x = new Class;)以及禁止使用列表表达式作为哈希键来模拟稀疏多维数组。
-g 命令行标志
新的命令行标志 -g 可用,它是 -0777 的更简单别名。详细信息请参阅 perlrun 中的“-g”。
支持 Unicode 14.0
关于 Unicode 14.0 的详细信息,参阅 https://www.unicode.org/versions/Unicode14.0.0/。
SIGFPE 不再延期
浮点异常现在可以立即传递,表现与其他类似“故障”的信号(如 SIGSEGV)相同。
稳定的布尔跟踪
现在即使通过赋值给变量,也能记住 "true" 和 "false" 布尔值的布尔性质, 内置的新函数 is_bool() 可以检查一个值是否具有布尔性质。
转为稳定的实验性功能
- 实验性的正则表达式集功能(正式名称为“扩展括号字符类”)已转为稳定功能,详情参阅 perlrecharclass 中的“扩展括号字符类”。
- 可变长度的 Lookbehind 变为稳定功能,但包含捕获括号的 Lookbehind 仍保持实验性。
新的实验性功能
- 单次迭代多个值(实验性)
现在可以通过在括号内指定词汇列表来一次迭代多个值。例如,
for my ($key, $value) (%hash) { ... } for my ($left, $right, $gripping) (@moties) { ... }
更多详细信息,请参阅 perlsyn 中的“复合语句”。
- builtin 内置函数(实验性)
添加了一个新的 builtin 核心模块,它可为内置在解释器中的、新的始终存在的函数(always-present functions)提供文档。
say "Reference type of arrays is ", builtin::reftype([]);
它还提供了一种词法导入机制,用于提供这些函数的短名称版本。
use builtin 'reftype'; say "Reference type of arrays is ", reftype([]);
有关该函数的详细信息,请参阅 builtin 。
- defer 延迟块(实验性)
此版本增加了对defer
块的支持,这些块是以defer
修饰符为前缀的代码块。即提供了一段代码,稍后在范围退出期间运行。
在运行时到达一个defer
块时,它的主体将被搁置,以在退出封闭范围时运行。defer
块可用于代替“范围保护”对象,向对象传递要由其析构函数运行的代码块。
详细信息请参阅 perlsyn 中的“延迟块”。
- try/catch 支持 finally 关键词(实验性)
实验性 try/catch 语法已扩展为支持 finally 关键字:
try { attempt(); print "Success\n"; } catch ($e) { print "Failure\n"; } finally { print "This happens regardless\n"; }
详细信息参阅 perlsyn 中的“try/catch 异常处理”。
- 非 ASCII 分隔符(实验性)
此前 Perl 只允许四对字符串/模式分隔符:( ) { } [ ] 和 < >,都在 ASCII 范围内。而 Unicode 有数百种符号,使用非 ASCII 分隔符功能可以实现其中的许多可能性。 比如 qr« » ,或者 q𝄃字符串𝄂。
详细信息请参阅“'extra_paired_delimiters' 功能”。
以上是部分功能更改,该版本还包含一些功能弃用、性能增强和模块更新内容,感兴趣的朋友可在 Perl 5.36 版本更新文档中查阅。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
深度操作系统 Deepin 20.6 现已发布
深度操作系统 20.6 现已发布,该版本响应社区用户反馈的需求,开发并集成了大量实用功能,同步上游内核版本,修复底层漏洞,升级 Stable 内核至 5.15.34,进一步提升系统兼容性和安全性。 亮点内容: 应用分类过滤 应用商店现在支持对应用的搜索的结果进行分类过滤,Linux 原生应用、windows 应用、安卓应用直接区分,最快速的找到自己所需的应用进行安装,节省查找和检索的时间! 全盘安装根分区空间自定义 现在进行全盘安装的时候,可以对系统分区大小进行手动更改,想分配多少就分配多少。 OCR 文字识别全面提升 OCR 文字识别功能进一步优化,识别速度和识别准确率全面提升,上两张图感受一下,20.5 VS 20.6。 20.5 版本 ORC : (辨识度低的部分,识别出来的文字内容可谓经典胡言乱语) 20.6 版本 ORC : 磁盘逻辑卷管理 磁盘管理器新增逻辑卷管理功能,有效提升系统的扩展性和磁盘管理的便捷性。 新增龙脊梯田壁纸 这张照片拍摄于广西桂林市龙胜县龙脊梯田。清晨,朝阳从梯田山谷的狭缝中漏出,照亮了飘荡在田野上的晨雾,给大地蒙上一层暖色,而一旁的古寨还沉溺于晨间的静...
- 下一篇
Spring Shell 2.1.0-M4 发布
Spring Shell 2.1.0-M4 现已发布,感兴趣的用户可以从https://repo.spring.io/milestone获得。 该版本中一些值得注意的变化包括: 项目已更新为 Boot2.7.0 命令子系统已被重写 支持动态注册命令 执行目标现在也可以是Function或Consumer 内置帮助命令通过模板呈现 Issues #427非交互模式下的 Better errors #422重做help command #421在 command registration 中把 help 改为description #420在 CommandContext 中公开 CommandRegistration #419更新boot2.7.0 #417支持定义历史文件位置 #414在 SingleItemSelector 中公开默认选项 #411更新boot 2.6.7 #409默认值未正确使用 #395删除 jcommander #394删除 spring-shell-test-samples #387添加 ComponentFlow 的自动配置 #383更新文档 #382更新b...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19