解放了!!! 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 "Successn";
    }
    catch ($e) {
    print "Failuren";
    }
    finally {
    print "This happens regardlessn";
    }
    详细信息参阅 perlsyn 中的“try/catch 异常处理”。
    • 非 ASCII 分隔符(实验性)
    此前 Perl 只允许四对字符串/模式分隔符:( ) { } [ ] 和 < >,都在 ASCII 范围内。而 Unicode 有数百种符号,使用非 ASCII 分隔符功能可以实现其中的许多可能性。 比如  qr« » ,或者 q𝄃字符串𝄂。 详细信息请参阅“'extra_paired_delimiters' 功能”。   以上是部分功能更改,该版本还包含一些功能弃用、性能增强和模块更新内容,感兴趣的朋友可在 Perl 5.36 版本更新文档中查阅。  

    相關推薦

    2023-07-05

    的数据存储在行为类似于词汇的“字段”变量中。 use feature 'class'; class Point { field $x; field $y; method zero { $x = $y = 0; } } 这是一个新的实验性功能,并且仍在开发中。 支持 Unicode 15.0 有关 Unicode 15.0 的详细信息,请参阅 https://w

    2022-12-16

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

    2022-06-29

    查看,Fedora 37 正在努力开发中,计划(争取)在 10 月底发布。

    2022-11-16

    在推迟了半个月之后,Fedora Project 正式发布了 Fedora Linux 37,带来了以下变化: Fedora Workstation 37 搭载 GNOME 43 桌面环境 Fedora Linux Spins 也包含一些其他桌面环境的最新版本,即 KDE Plasma 5.26、Xfce 4.16、LXQt 1.1.0(LXQt 1.2.0 可以作

    2022-06-22

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

    2022-12-04

    NixOS 作为围绕独特的 Nix 软件包管理器构建的 Linux 发行版,推出了今年的最后一个版本。 NixOS 在这个版本中为 nixpkgs 增加了 16678 个新的软件包和 14680 个更新软件包,该版本还删除了 2812 个软件包,以保持软件包集的可维护性

    2022-11-23

    嵌入式 Linux 部署的热门选择。 目前 Alpine Linux 3.17 发布了,此版本仍然由 Linux 5.15 LTS 内核系列提供支持,但把默认的 OpenSSL 实现升级到 OpenSSL 3.0 版本,此外,Rust 现在可用于所有支持的架构。 Alpine Linux 3.17 还附带了一些

    2023-03-08

    徊在 11、12 名这两个位置。到了本月,Go “不负众望“ 终于进入了前十名的行列中。 Go 是静态类型的编程语言,具有并发性和垃圾回收这样的特点,并且还有良好的性能。Docker 和 Kubernetes 等热门应用都是在 Go 的帮助下开发的

    2023-04-02

    接下来我们看看他怎么使用 首先 maven引入,目前他已经发布到了maven中央仓库,使用起来很方便 <dependency> <groupId>kim.wind</groupId> <artifactId>sms-aggregation-spring-boot-starter</artifactId> <version> version </versi

    2023-10-28

    ava 通信框架。 产品特色: 极简:于2017年开源至今发布了数十次版本,核心代码量始终控制在2500行以内,总代码量不足5000行。 易用:5分钟上手(前提:未曾遭受网上错误编解码知识的毒害) 高性能:以算法之力

    2024-10-23

    控分析和告警能力。夜莺于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 100 多个版本。 夜莺最初由滴滴开发和开源,并于 2022 年 5 月 11 日,捐赠予中国计算机学会开源发展委员会(CCF ODC),为 CCF ODC 成立后接受捐

    2022-05-18

    据 Python 基金会博客介绍,开发者 Sam Gross 在 2022 Python 语言峰会上带来了一个新提案:完全移除 CPython 解释器的 GIL- 全局解释器锁,使 Python 程序获得更快的性能 —— 尤其是多线程程序。 Python 有多个版本,包括 JVM 、 .NET CLR

    2023-02-24

    戏一样容易使用,该如何构建?当开发者从网络的细节中解放出来时,可以想象怎样的非凡体验——新的和有趣的互动? Ambient 便是他们回答这些问题的开始:一个旨在让各种开发者能够构建和分享他们想要构建的体验的运行

    2021-12-07

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