perl5203delta - perl v5.20.3 的新增功能
本文档描述了 5.20.2 版本和 5.20.3 版本之间的差异。
如果您正在从早期版本(例如 5.20.1)升级,请首先阅读 perl5202delta,其中描述了 5.20.1 和 5.20.2 之间的差异。
没有与 5.20.2 故意不兼容的更改。如果存在,它们是错误,我们要求您提交报告。请参阅下面的 "报告错误"。
Errno 已从版本 1.20_05 升级到 1.20_06。
在 GCC 5 的预处理器命令行中添加 -P。GCC 添加了额外的行指令,中断了错误代码定义的解析。 [GH #14491]
Module::CoreList 已从版本 5.20150214 升级到 5.20150822。
已更新,以涵盖 Perl 的最新版本。
perl5db.pl 已从 1.44 升级到 1.44_01。
调试器将导致断言失败。 [GH #14605]
提到 study()
目前是无操作符。
OOK 示例已更新,以考虑 COW 更改和偏移量存储更改。
已添加文档,说明假设 Perl 包装器指向的静态内存内容不会更改的 C 库函数的危险性。
POD 语言规范正在更改,以便非 UTF-8 的 POD 的默认编码(除非另有说明)为 CP1252,而不是 ISO-8859-1(Latin1)。
h2ph 现在处理编译器预定义宏定义中的十六进制常量,如在 $Config{cppsymbols}
中可见。 [GH #14491]
已添加 t/perf/taint.t,以查看带有污染问题的优化是否保持快速。
已添加 t/porting/re_context.t 以测试 utf8 及其依赖项仅使用 $1..$n
捕获变量的子集,Perl_save_re_context() 硬编码为对其进行本地化,因为该函数没有有效的方法在运行时确定要本地化的变量。
以前,使用 64 位 Visual C++ 编译时,每个 Perl XS 模块(包括 CPAN 模块)和 Perl 感知 C 文件都会从 hv_func.h 无条件地收到大约十几个警告。这些警告已被消除。GCC(所有位数)和 32 位 Visual C++ 未受影响。
miniperl.exe 现使用 -fno-strict-aliasing 构建,允许 64 位构建使用 GCC 4.8 完成。 [GH #14556]
在大型受污染字符串上进行重复的全局模式匹配在标量上下文中非常慢,具体取决于字符串中的当前匹配位置。 [GH #14238]
当 $/
设置为无效值时,其原始可见值现在得以保留。以前,如果你将 $/
设置为对数组的引用,例如,perl 会产生运行时错误并且不会设置 PL_rs,但检查 $/
的 Perl 代码会看到数组引用。 [GH #14245]
Perl 5.14.0 引入了一个错误,导致 eval { LABEL: }
崩溃。此问题已得到修复。 [GH #14438]
从父线程克隆的数组的扩展可能会导致在尝试修改新元素时出现“尝试修改只读值”错误。 [GH #14605]
已修复核心 C 代码中用于存储环境变量内容的数据在使用前可能被覆盖的几个案例。 [GH #14476]
现在,在数组索引中使用的 UTF-8 变量名、未加引号的 UTF-8 HERE 文档终止符和 UTF-8 函数名都可以正常工作。 [GH #14601]
已修复 Perl 5.20.2 中引入的一个细微错误,该错误涉及正则表达式中的 UTF-8,有时会导致崩溃。已添加一个新的测试脚本来测试此修复;请参阅 "测试"。 [GH #14600]
自 Perl 5.8 以来,一些以 /.*..../
开头的模式与长字符串匹配时速度很慢,自 Perl 5.18 以来,一些 /.*..../i
形式的模式速度很慢。现在它们都再次变快了。 [GH #14475]
现在在回绕堆栈时忽略警告致命性。当现在致命的错误也导致堆栈回绕时,这可以防止无限递归。 [GH #14319]
在 Perl 5.16 中,setpgrp($nonzero)
(带一个参数)意外地更改为表示 setpgrp(0)
。此问题已得到修复。
%::=(); J->${\"::"}
中的崩溃已得到修复。 [GH #14790]
Perl 5.20 中的正则表达式所有格量词回归现在已得到修复。qr/
PAT{
min,max}+
/
应该与 qr/(?>
PAT{
min,max})/
的行为相同。自 Perl 5.20 以来,如果 min 和 max 相等,则此功能不起作用。 [GH #14857]
/$a[/
等代码用于读取输入的下一行,并将其视为紧跟在开括号之后。因此,一些无效代码可以解析和运行,但一些代码会导致崩溃,因此现在不允许这样做。 [GH #14462]
Perl 5.20.3 表示自 Perl 5.20.2 以来大约 7 个月的开发,并且包含来自 26 位作者的 99 个文件中约 3,200 行的更改。
不包括自动生成的文件、文档和发布工具,大约有 1,500 行更改到 43 个 .pm、.t、.c 和 .h 文件。
由于活跃的用户和开发人员社区,Perl 在其第三个十年中继续蓬勃发展。已知以下人员为 Perl 5.20.3 的改进做出了贡献
Alex Vandiver、Andy Dougherty、Aristotle Pagaltzis、Chris 'BinGOs' Williams、Craig A. Berry、Dagfinn Ilmari Mannsåker、Daniel Dragan、David Mitchell、Father Chrysostomos、H.Merijn Brand、James E Keenan、James McCoy、Jarkko Hietaniemi、Karen Etheridge、Karl Williamson、kmx、Lajos Veres、Lukas Mai、Matthew Horsfall、Petr Písař、Randy Stauner、Ricardo Signes、Sawyer X、Steve Hay、Tony Cook、Yves Orton。
以上列表几乎肯定不完整,因为它是从版本控制历史中自动生成的。特别是,它不包括向 Perl bug 跟踪器报告问题的(非常感谢的)贡献者的姓名。
此版本中包含的许多更改源自 Perl 核心包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。
有关所有 Perl 历史贡献者的更完整列表,请参阅 Perl 源代码发行版中的 AUTHORS 文件。
如果您发现您认为是错误的内容,您可能会查看最近发布到 comp.lang.perl.misc 新闻组和 https://rt.perl.org/ 上的 Perl 错误数据库中的文章。Perl 主页 https://www.perl5.cn/ 上也可能会有信息。
如果您认为您遇到了未报告的错误,请运行发行版中包含的 perlbug 程序。务必将错误精简为一个微小但足够的测试用例。您的错误报告以及 perl -V
的输出将被发送到 [email protected],供 Perl 移植团队分析。
如果您报告的错误具有安全影响,不适合发送到公开存档的邮件列表,请将其发送到 [email protected]。这指向一个封闭的订阅未存档的邮件列表,其中包括所有核心提交者,他们将能够帮助评估问题的严重性,找出解决方案,并帮助协调在 Perl 受支持的所有平台上发布补丁以减轻或修复问题。请仅将此地址用于 Perl 核心中的安全问题,而不是用于在 CPAN 上独立分发的模块。
Changes 文件,了解如何查看已更改内容的详尽详细信息。
INSTALL 文件,了解如何构建 Perl。
README 文件,了解一般内容。
Artistic 和 Copying 文件,了解版权信息。