perl5201delta - perl v5.20.1 的新特性
本文档描述了 5.20.0 版本和 5.20.1 版本之间的差异。
如果您从 5.18.0 等早期版本升级,请先阅读 perl5200delta,其中描述了 5.18.0 和 5.20.0 之间的差异。
没有故意与 5.20.0 不兼容的更改。如果存在任何不兼容的更改,它们都是错误,我们要求您提交报告。请参阅下面的 "报告错误"。
由于一项优化会干扰另一项更重要的优化,导致某些平台速度变慢,因此已禁用一项避免 COW 和故意过度分配 PV 问题的优化。 [GH #13878]
在某些情况下,从词法变量返回字符串可能会很慢。现在已修复此问题。 [GH #13880]
Config::Perl::V 已从版本 0.20 升级到 0.22。
已更新涵盖的 Perl 版本列表,并修复了解析中的一些缺陷。
Exporter 已从版本 5.70 升级到 5.71。
已更正文档中的非法 POD 语法。
ExtUtils::CBuilder 已从版本 0.280216 升级到 0.280217。
Android 构建现在链接到 -lperl 和 $Config::Config{perllibs}
。
File::Copy 已从版本 2.29 升级到 2.30。
文档现在指出 copy
不会覆盖只读文件。
Module::CoreList 已从版本 3.11 升级到 5.020001。
已更新涵盖的 Perl 版本列表。
PathTools 模块集合已从版本 3.47 升级到 3.48。
当为 Android 交叉编译且 $Config::Config{sh}
尚未定义时,现在已到位回退。 [GH #13872]
PerlIO::via 已从版本 0.14 升级到 0.15。
对 XS 实现进行了轻微的可移植性改进。
Unicode::UCD 已从版本 0.57 升级到 0.58。
文档包含许多澄清和修复。
utf8 已从版本 1.13 升级到 1.13_01。
文档有一些轻微的格式改进。
version 已从版本 0.9908 升级到 0.9909。
外部库和 Perl 可能对区域设置的定义不同。当解析版本字符串时,如果区域设置的数字分隔符已更改,则会出现问题。版本解析已修补以确保它正确处理区域设置。 [GH #13863]
av_len
- 强调这返回数组中最高索引,而不是数组的大小。 [GH #13377]
请注意,SvSetSV
不会执行设置魔法。
sv_usepvn_flags
- 修复文档以提及使用 NewX
而不是 malloc
。 [GH #13835]
阐明 NUL
可以在何处嵌入或需要终止字符串。
阐明-B
和-T
的含义。
-l
现在指出,如果文件系统不支持符号链接,它将返回false。 [GH #13695]
请注意,与其他perl哈希相比,each
、keys
和values
可能会对绑定哈希产生不同的排序。 [GH #13650]
请注意,exec LIST
和system LIST
可能会在Win32上回退到shell。只有exec PROGRAM LIST
和system PROGRAM LIST
间接对象语法才能可靠地避免使用shell。这一点也在perlport中有所说明。 [GH #13907]
阐明our
的含义。 [GH #13938]
解释修改现有SV缓冲区的各种方法。 [GH #12813]
我们现在有了p5p邮件列表的行为准则,如"STANDARDS OF CONDUCT" in perlpolicy中所述。
/x
修饰符已澄清,指出注释不能通过转义来延续到下一行。
提到在for
/while
循环中使用空条件语句来实现无限循环。
添加了关于XS代码中区域设置问题的讨论。
对诊断输出(包括警告和致命错误消息)进行了以下添加或更改。有关诊断消息的完整列表,请参见perldiag。
添加了有关Unicode行为的信息。
当使用Configure的-Dmksymlinks选项配置时,构建Perl不再写入源代码树。 [GH #13712]
总体上,跨编译构建支持得到了改进,特别是针对 Android 的构建支持。
在构建 Perl 时,配置提示中使用的架构和版本号已得到修正。
c99 选项已清理,提示会查找 solstudio 和 SUNWspro,并添加了对原生 setenv
的支持。
已修复了主要影响 7.3 之前系统的一个旧错误,该错误存在于特性检查中。
现在使用 %I64d
代替 %lld
来表示 MinGW。
在 perlapi 中添加了 "sync_locale"。XS 代码应避免更改程序的区域设置。然而,某些从 XS 调用的非 Perl 库,例如 Gtk
,会这样做。当这种情况发生时,Perl 需要被告知区域设置已更改。在返回 Perl 之前,使用此函数来执行此操作。
已修复一个错误,该错误会导致正则表达式中的零长度断言和代码块导致 pos
显示不正确的值。 [GH #14016]
在受污染的 utf8 字符串上使用 s///e
可能会发出错误的“格式错误的 UTF-8 字符(字符串意外结束)”警告。现在已修复此问题。 [GH #13948]
system
及其相关函数现在应该在更多 Android 构建中正常工作。
由于疏忽,通过 -Dtargetsh 指定给 Configure 的值最终会被构建过程中的某些部分忽略。这导致为 Android 跨编译的 Perl 最终会使用有缺陷版本的 system
、exec
和反引号:这些命令最终会查找 /bin/sh 而不是 /system/bin/sh,因此对于绝大多数设备都会失败,并导致 $!
为 ENOENT
。
Coverity 检测到许多问题并已修复。
Perl 5.20.1 代表了自 Perl 5.20.0 以来大约 4 个月的开发,包含来自 36 位作者的 170 个文件中的大约 12,000 行更改。
不包括自动生成的、文档和发布工具文件,对 110 个 .pm、.t、.c 和 .h 文件进行了大约 2,600 行更改。
得益于充满活力的用户和开发人员社区,Perl 在其第三个十年中继续蓬勃发展。以下人员已知为 Perl 5.20.1 的改进做出了贡献。
Aaron Crane、Abigail、Alberto Simões、Alexandr Ciornii、Alexandre (Midnite) Jousset、Andrew Fresh、Andy Dougherty、Brian Fraser、Chris 'BinGOs' Williams、Craig A. Berry、Daniel Dragan、David Golden、David Mitchell、H.Merijn Brand、James E Keenan、Jan Dubois、Jarkko Hietaniemi、John Peacock、kafka、Karen Etheridge、Karl Williamson、Lukas Mai、Matthew Horsfall、Michael Bunk、Peter Martini、Rafael Garcia-Suarez、Reini Urban、Ricardo Signes、Shirakata Kentaro、Smylers、Steve Hay、Thomas Sibley、Todd Rinaldo、Tony Cook、Vladimir Marek、Yves Orton。
上面的列表几乎肯定是不完整的,因为它是由版本控制历史自动生成的。特别是,它不包括报告 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 文件,了解版权信息。