perl5221delta - perl v5.22.1 的新功能
本文档描述了 5.22.0 版本和 5.22.1 版本之间的差异。
如果您从 5.20.0 等早期版本升级,请先阅读 perl5220delta,其中描述了 5.20.0 和 5.22.0 之间的差异。
除了以下单个例外之外,没有故意与 5.20.0 不兼容的更改,我们认为这是一个明智的更改,以便在人们决定它们因为 Perl 5.22.0 实现中的错误而毫无价值并避免在将来使用它们之前,使新的 \b{wb}
和(特别是)\b{sb}
功能变得合理。如果存在其他任何不兼容的更改,它们都是错误,我们要求您提交报告。请参阅下面的 "报告错误"。
已修复了边界检查结构(在 Perl 5.22 中引入)\b{gcb}
、\b{sb}
、\b{wb}
、\B{gcb}
、\B{sb}
和 \B{wb}
的几个错误,包括段错误。所有 \B{}
现在匹配空字符串;而 \b{}
则不匹配。 [GH #14976]
Module::CoreList 已从版本 5.20150520 升级到 5.20151213。
PerlIO::scalar 已从版本 0.22 升级到 0.23。
POSIX 已从版本 1.53 升级到 1.53_01。
如果 POSIX::strerror
传递 $!
作为其参数,则它会意外地清除 $!
。此问题已修复。 [GH #14951]
Storable 已从版本 2.53 升级到 2.53_01。
warnings 已从版本 1.32 升级到 1.34。
warnings::enabled
示例现在实际使用 warnings::enabled
。 [GH #14905]
Win32 已从版本 0.51 升级到 0.52。
此更新适用于 Windows 8.1、10 和 2012 R2 Server。
已澄清 FIRSTKEY
和 NEXTKEY
的用法。
现在记录了 $!{E...}
的特定真值,并指出它可能会更改,不保证。
已对诊断输出(包括警告和致命错误消息)进行以下添加或更改。有关诊断消息的完整列表,请参阅 perldiag。
printf
和 sprintf
内置函数现在对它们发出的警告更加谨慎:参数重新排序现在在所有情况下都会禁用“冗余参数”警告。 [GH #14772]
在 Perl 5.17.10 之后,将 NO_HASH_SEED
定义与默认哈希算法 PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
结合使用会导致在编译解释器时出现致命错误。此问题已修复。
在 Perl 5.22.0 中,使用包含引号的 ccflags 进行配置(例如 -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"'
)已损坏,但现在已修复。 [GH #14732]
在某些情况下,IRIX stdio fgetc() 和 fread() 将 errno 设置为 ENOENT
,这根据 IRIX 或 POSIX 文档都没有意义。现在在这些情况下会清除 Errno。 [GH #14557]
已修复将长双精度数乘以无穷大时的错误。 [GH #14993]
现在所有测试在使用默认构建配置的 IRIX 上都通过了。
qr/(?[ () ])/
不再出现段错误,而是给出语法错误消息。 [GH #14851]
已修复正则表达式占有量词 Perl 5.20 回归。qr/
PAT{
min,max}+
/
应该与 qr/(?>
PAT{
min,max})/
行为相同。从 Perl 5.20 开始,如果 min 和 max 相等,则此方法不起作用。 [GH #14857]
在 "perlrecharclass 中的扩展括号字符类" 中,某些语法错误会导致恐慌,而不是正确的错误消息。现在已修复此问题。 [GH #15016]
BEGIN <>
不再出现段错误,并正确地生成错误消息。 [GH #13546]
已修复 Perl 5.20 中的回归,其中正则表达式模式中 (?[...])
结构中的一些语法错误会导致段错误,而不是正确的错误消息。 [GH #14933]
已修复 (?[...])
结构中的另一个问题,其中诸如 \c]
之类的内容会导致恐慌。 [GH #14934]
在 Perl 5.22.0 中,解析 -C 选项的数字参数时的逻辑发生了变化,因此如果解析到参数的末尾,则成功解析的数字不会保存为选项值。 [GH #14748]
现在在倒带堆栈时忽略警告致命性。这可以防止在现在致命的错误也导致堆栈倒带时出现无限递归。 [GH #14319]
已修复 %::=(); J->${\"::"}
导致的崩溃。 [GH #14790]
诸如 /.{1}??/
之类的嵌套量词应该导致 perl 抛出致命错误,但自 Perl 5.20.0 以来一直被静默接受。现在已修复此问题。 [GH #14960]
诸如 /(?i/
之类的正则表达式序列(以及类似的带有其他识别标志或标志组合的序列)应该导致 perl 抛出致命错误,但自 Perl 5.18.0 以来一直被静默接受。现在已修复此问题。 [GH #14931]
十六进制浮点文字支持中的错误意味着在尾数溢出是由小数部分中过多的尾随零引起的的情况下,可能会丢失高位。现在已修复此问题。 [GH #15032]
另一个十六进制浮点错误,导致在尾数的最后一个十六进制数字的位跨越尾数允许的位数限制的情况下丢失低位,也已修复。 [GH #15033]
已修复了更多十六进制浮点数错误:在某些情况下,%a
格式说明符可能会丢失负零的符号,无法以请求的精度显示小数点后的零,甚至可能完全丢失最左侧十六进制数字后的 radix 点。
已修复了由 /(?[ ])/
中的不完整表达式(例如 /(?[[0]+()+])/
)引起的崩溃。 [GH #15045]
Perl 5.22.1 代表了自 Perl 5.22.0 以来大约 6 个月的开发,包含了来自 27 位作者的 130 个文件中的大约 19,000 行更改。
不包括自动生成的 文件、文档和发布工具,大约有 1,700 行更改涉及 44 个 .pm、.t、.c 和 .h 文件。
Perl 继续在第三个十年中蓬勃发展,这得益于充满活力的用户和开发人员社区。以下人员已知为 Perl 5.22.1 的改进做出了贡献
Aaron Crane、Abigail、Andy Broad、Aristotle Pagaltzis、Chase Whitener、Chris 'BinGOs' Williams、Craig A. Berry、Daniel Dragan、David Mitchell、Father Chrysostomos、Herbert Breunung、Hugo van der Sanden、James E Keenan、Jan Dubois、Jarkko Hietaniemi、Karen Etheridge、Karl Williamson、Lukas Mai、Matthew Horsfall、Peter Martini、Rafael Garcia-Suarez、Ricardo Signes、Shlomi Fish、Sisyphus、Steve Hay、Tony Cook、Victor Adam。
上面的列表几乎肯定是不完整的,因为它是由版本控制历史自动生成的。特别是,它不包括向 Perl 错误跟踪器报告问题的贡献者(非常感谢)的姓名。
此版本中包含的许多更改源自 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 文件,了解版权信息。