内容

名称

perl5340delta - perl v5.34.0 的新增内容

描述

本文档描述了 5.32.0 版本和 5.34.0 版本之间的差异。

如果您从 5.30.0 等早期版本升级,请先阅读 perl5320delta,其中描述了 5.30.0 和 5.32.0 之间的差异。

核心增强功能

实验性 Try/Catch 语法

已添加对提供 try/catch 符号的初步实验性尝试。

use feature 'try';

try {
    a_function();
}
catch ($e) {
    warn "An error occurred: $e";
}

有关更多信息,请参见 "perlsyn 中的 Try Catch 异常处理"

现在接受 qr/{,n}/

现在接受正则表达式量词的空下限,例如 m/x{,3}/ 表示 m/x{0,3}/

在花括号内但相邻的花括号中允许空白

(在双引号上下文和正则表达式模式中)

这意味着您可以根据需要编写诸如 \x{ FFFC } 之类的内容。这适用于所有此类构造,即 \b{}\g{}\k{}\N{}\o{}\x{};以及正则表达式量词 {m,n}\p{}\P{} 保留其现有的、更宽松的规则,这些规则由 Unicode 标准规定(请参见 "perluniprops 中通过 \p{} 和 \P{} 访问的属性")。

无论是否存在 /x 正则表达式模式修饰符,此功能均有效。

此外,正则表达式花括号量词中的逗号可以在逗号之前和/或之后有空白(制表符或空格),例如 qr/a{ 5, 7 }/

新的八进制语法 0oddddd

现在可以使用 0o 前缀指定八进制文字,例如 0o123_456,与现有构造平行,以指定十六进制文字 0xddddd 和二进制文字 0bddddd。此外,内置的 oct() 函数现在接受这种新的语法。

请参见 "perldata 中的标量值构造函数""perlfunc 中的 oct EXPR"

性能增强

模块和语义

新增模块和语义

更新的模块和语义

文档

新文档

perldocstyle

本文档是 Perl 附带文档的创作和维护指南。

perlgov

本文档描述了 Perl 新治理模型的目标、范围、系统和规则。

其他 pod 文件,尤其是 perlpolicy,已修改以反映其采用。

现有文档的更改

我们已尝试更新文档以反映本文档中列出的更改。如果您发现我们遗漏了任何内容,请在 https://github.com/Perl/perl5/issues 上打开一个问题。

此外,还进行了以下选定更改

perlapi

perlcommunity

perldebguts

perldiag

perlfaq

perlfunc

perlgit

perlguts

perlop

perlpacktut

perlsyn

perlunifaq

诊断信息

以下是对诊断输出(包括警告和致命错误消息)的添加或更改。有关诊断消息的完整列表,请参阅 perldiag

新增诊断信息

新增错误

新增警告

对现有诊断信息的更改

实用程序更改

perl5db.pl(调试器)

配置和编译

测试

添加和更改了测试以反映此版本中的其他添加和更改。此外,还进行了以下重大更改

平台支持

新平台

9front

允许在 i386 9front 系统(plan9 的一个分支)上构建 Perl。

更新的平台

Plan9

改进对 i386 平台上 Plan9 的支持。

MacOS (Darwin)

darwin 的提示文件已更新,以处理 10 之后未来的 MacOS 版本。[GH #17946]

已停用的平台

Symbian

与 Symbian 相关的支持代码已被移除。Symbian 是移动设备的操作系统。该端口最后更新于 2009 年 7 月,平台本身最后更新于 2012 年 10 月。

特定平台说明

DragonFlyBSD

测试已更新,以解决 DragonFlyBSD 中 tc*() 函数ctime 更新 的错误。

Mac OS X

Big Sur 上,许多系统库不再以实际文件的形式存在,尽管 `dlopen` 会假装它们存在,因此现在如果找不到库文件,我们会回退到 `dlopen`。[GH #18407]

Windows

当控制台的代码页设置为 65001 (UTF-8) 时,从控制台读取非 ASCII 字符会因 Windows 中的错误而导致故障。已实施解决此问题的变通方法。[GH #18701]

使用 mingw.org 编译器(版本 3.4.5 或更高版本)并使用低于 3.22 的 mingw 运行时版本的构建现在再次有效。这在 Perl 5.31.4 中已损坏。

使用 mingw.org 编译器(版本 3.4.5 或更高版本)并使用 3.21 或更高版本的 mingw 运行时版本的构建现在有效(对于最高版本为 5.3.0 的编译器)。

Makefile.mk 以及对 dmake 的支持已被移除。仍然可以使用 nmake (Makefile) 和 GNU make (GNUmakefile) 在 Windows 上构建 Perl。[GH #18511]

现在可以使用 (32 位和 64 位) mingw-w64 移植的 gcc 在 MS Windows 上使用 `USE_QUADMATH` 构建 perl。[GH #18465]

pl2bat.pl 实用程序现在需要 `use ExtUtils::PL2Bat`。这可能会导致并行构建失败。

Windows 现在支持 symlink()readlink(),而 lstat() 不再是 stat() 的别名。[GH #18005].

与 POSIX 系统不同,在 Windows 上创建符号链接需要提升的权限或启用了开发人员模式的 Windows 10 1703 或更高版本。

stat(),包括 `stat FILEHANDLE`,以及 lstat() 现在使用我们自己的实现来填充返回的设备 `dev` 和 inode 编号 `ino`,而不是始终返回零。链接数 `nlink` 字段现在始终填充。

${^WIN32_SLOPPY_STAT} 以前控制是否填充 `nlink` 字段,这需要单独的 Windows API 调用来获取,因为现在在单个 API 调用中检索了 `nlink` 和 `stat()` 所需的其他信息。

-r-w 运算符现在对 `STDIN`、`STDOUT` 和 `STDERR` 处理程序返回 true。不幸的是,它仍然不会对这些处理程序的副本返回 true。[GH #8502].

stat() 和 lstat() 返回的时间不再跨越夏令时调整不正确。[GH #6080].

在 Vista 或更高版本上,文件句柄上的 -x 现在应该与对应文件名上的 -x 相匹配。[GH #4145]。

-e '"' 不再错误地返回 true。[GH #12431]。

现在 Visual C++ 和 gcc 构建使用相同的清单。

以前,MSVC 构建使用 /manifestdependency 标志而不是嵌入 perlexe.manifest,这会导致一些问题,例如 GetVersionEx() 在 Windows 10 上返回错误的版本号。

z/OS

现在识别 LC_SYNTAXLC_TOD 本地化类别。Perl 除了现在允许您指定它们之外,对这些类别不做任何操作。它们包含在 LC_ALL 中。

内部更改

选定的错误修复

已知问题

先前版本中的勘误

讣告

Kent Fredric (KENTNL) 于 2021 年 2 月去世。他是新西兰人,自称“超级极客”,是 178 个 CPAN 发行版的作者或维护者,Gentoo Linux 发行版的 Perl 维护者,也是 Perl 核心发行版的贡献者。他的家人、朋友和全球开源软件社区都为他的逝去感到悲痛。

致谢

Perl 5.34.0 代表了自 Perl 5.32.0 以来大约 11 个月的开发,包含来自 78 位作者的 2100 个文件中的大约 280,000 行更改。

不包括自动生成的 文件、文档和发布工具,大约有 150,000 行更改涉及 1300 个 .pm、.t、.c 和 .h 文件。

得益于充满活力的用户和开发人员社区,Perl 在其第四个十年中继续蓬勃发展。以下人员已知为 Perl 5.34.0 的改进做出了贡献。

Aaron Crane, Adam Hartley, Andy Dougherty, Ben Cornett, Branislav Zahradník, brian d foy, Chris 'BinGOs' Williams, Christian Walde (Mithaldu), Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, Daniel Böhmer, Daniel Laügt, Dan Kogai, David Cantrell, David Mitchell, Dominic Hamon, E. Choroba, Ed J, Eric Herman, Eugene Alvin Villar, Felipe Gasper, Giovanni Tataranni, Graham Knop, Graham Ollis, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ichinose Shogo, Ivan Baidakou, Jae Bradley, James E Keenan, Jason McIntosh, jkahrman, John Karr, John Lightsey, Kang-min Liu, Karen Etheridge, Karl Williamson, Keith Thompson, Leon Timmermans, Marc Reisner, Marcus Holland-Moritz, Max Maischein, Michael G Schwern, Nicholas Clark, Nicolas R., Paul Evans, Petr Písař, raiph, Renee Baecker, Ricardo Signes, Richard Leach, Romano, Ryan Voots, Samanta Navarro, Samuel Thibault, Sawyer X, Scott Baker, Sergey Poznyakoff, Sevan Janiyan, Shirakata Kentaro, Shlomi Fish, Sisyphus, Sizhe Zhao, Steve Hay, TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tom Hukins, Tom Stellard, Tony Cook, vividsnow, Yves Orton, Zakariyya Mughal, Михаил Козачков.

上面的列表几乎肯定是不完整的,因为它是由版本控制历史自动生成的。特别是,它不包括向 Perl 错误跟踪器报告问题的(非常感谢)贡献者的姓名。

此版本中包含的许多更改源于 Perl 核心包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。

有关 Perl 所有历史贡献者的更完整列表,请参阅 Perl 源代码发行版中的 AUTHORS 文件。

报告错误

如果您发现您认为是错误的内容,您可以查看 https://github.com/Perl/perl5/issues 上的 perl 错误数据库。您也可以在 https://www.perl5.cn/(Perl 主页)上找到相关信息。

如果您认为您遇到了未报告的错误,请在 https://github.com/Perl/perl5/issues 上创建一个问题。请确保将您的错误缩减为一个微小但足以说明问题的测试用例。

如果您要报告的错误存在安全隐患,不适合发送到公共问题跟踪器,请参阅 "perlsec 中的 SECURITY VULNERABILITY CONTACT INFORMATION",了解如何报告该问题。

致谢

如果您想感谢 Perl 5 维护者为 Perl 5 所做的工作,您可以运行 perlthanks 程序。

perlthanks

这将向 Perl 5 维护者列表发送一封电子邮件,表达您的感谢。

另请参阅

Changes 文件,解释如何查看有关更改的详尽信息。

INSTALL 文件,介绍如何构建 Perl。

README 文件,介绍一般信息。

ArtisticCopying 文件,介绍版权信息。