perl5122delta - perl v5.12.2 的新功能
本文档描述了 5.12.1 版本和 5.12.2 版本之间的差异。
如果您要从早期主要版本(例如 5.10.1)升级,请先阅读 perl5120delta,其中描述了 5.10.0 和 5.12.0 之间的差异,以及 perl5121delta,其中描述了 5.12 稳定版系列中的早期更改。
此版本没有故意与 5.12.1 不兼容的更改。如果有任何不兼容的更改,它们都是 bug,欢迎报告。
除了下面列出的 bug 修复之外,此版本对核心语言没有用户可见的更改。
此版本没有引入任何新的模块或语义。
在之前的版本中,no VERSION;
语句会触发一个 bug,导致 功能 包被意外加载,并且 严格 模式被意外启用。
Carp
从版本 1.16 升级到 1.17。
Carp 现在可以检测到不完整的 caller() 覆盖,并避免使用虚假的 @DB::args
。为了提供回溯,Carp 依赖于 caller 内置函数的特定行为。Carp 现在可以检测到其他代码是否用不完整的实现覆盖了它,并相应地修改其回溯。以前不完整的覆盖会导致回溯中的值不正确(最佳情况),或者隐藏致命错误(最坏情况)。
这修复了由模块错误地覆盖 caller()
导致的某些 Bizarre copy of ARRAY
情况。
CPANPLUS
一个针对 cpanp-run-perl 的补丁已从 CPANPLUS 0.9004
反向移植。这解决了 RT #55964 和 RT #57106,这两个问题都与无法安装使用 Module::Install::DSL
的发行版有关。
File::Glob
已修复一个导致加载 File::Glob
后无法找到 CORE::GLOBAL::glob
而导致崩溃的回归。现在,它会正确地通过 pp_glob
回退到外部 glob。
File::Copy
File::Copy::copy(FILE, DIR)
现在已记录。
File::Spec
从版本 3.31 升级到 3.31_01。
在File::Spec::VMS
中进行了一些可移植性修复:冒号现在被识别为原生文件规范中的分隔符;插入符号转义的分隔符被识别,以便更好地处理扩展文件规范;如果输入目录名称为空,catpath()
将返回一个空目录,而不是当前目录;abs2rel()
正确地处理了 Unix 风格的输入。
perlbug现在始终会让报告者有机会更改它为他们猜测的电子邮件地址。
perlbug在使用-d
和-v
选项时,不再会警告未初始化的值。
现有的关于向后兼容性和弃用的策略已添加到perlpolicy中,以及对弃用等术语的定义。
"perlfunc 中的 srand"的用法已得到澄清。
"perlfunc 中的 die"的条目已重新组织,以强调其在异常机制中的作用。
Perl 的INSTALL文件已得到澄清,明确说明 Perl 需要一个符合 C89 标准的 ANSI C 编译器。
IO::Socket的getsockopt()
和setsockopt()
已得到文档化。
alarm()无法在 Windows 上中断阻塞 IO 的问题已得到文档化。
Math::TrulyRandom自 1996 年以来一直没有更新,并且已被删除,不再作为随机数生成的推荐解决方案。
perlrun已更新,以澄清八进制标志对perl的行为。
为了减轻用户的困惑,$#
和$*
这两个在早期版本的 Perl 中被删除的特殊变量已得到文档化。
与 Perl 核心一起发布的perlfaq版本已从官方 FAQ 版本更新,该版本现在在 Perl 存储库的briandfoy/perlfaq
分支中维护,该分支位于git://perl5.git.perl.org/perl.git。
ARM 上的 d_u32align
配置探测器已修复。
使用 clang
编译时,三元表达式中的“不兼容的操作数类型
”错误已修复。
Perl 现在会跳过在检测到以 nosuid
方式挂载的分区上的 setuid File::Copy
测试。
T_PRTOBJ
默认类型映射中可能出现的段错误已修复。
使用 caller() 设置 @DB::args
时可能出现的内存泄漏已修复。
加载 XS 模块时出现的几个内存泄漏已修复。
unpack()
现在针对 %32H
和 %32u
正确处理标量上下文,修复了潜在的崩溃。split()
会崩溃,因为堆栈上的第三项不是它期望的正则表达式。unpack("%2H", ...)
会在堆栈上返回解包结果和校验和,unpack("%2u", ...)
也是如此。 [GH #10257]
Perl 现在在 @INC
中存在 CODEREFs 时,会在调用 pp_require 后避免使用 free()
后的内存。
修复了从 XS 析构函数调用“call_sv(code, G_EVAL)
”时可能导致“未知错误
”消息的错误。
open $fh, '>' \$buffer
功能的实现现在支持 get/set 魔法,因此可以正确地绑定缓冲区。
pp_getc
、pp_tell
和 pp_eof
操作码现在在没有传入参数的情况下为其返回值在堆栈上腾出空间。
在某些情况下,匹配 Unicode 字符串时,不适当的回溯会导致 Malformed UTF-8 character (fatal)
错误。这种情况应该不再发生。参见 [GH #10434]
README.aix 已更新,其中包含有关 XL C/C++ V11 编译器套件的信息。
使用 mingw64 x64 交叉编译器构建 Perl 时,Config.pm 和 Config_heavy.pl 中的 incpath
、libpth
、ldflags
、lddlflags
和 ldflags_nolargefiles
值以前没有被正确设置,因为使用该编译器时,包含目录和库目录不在 $(CCHOME)
的正下方。
git_version.h 现在已安装在 VMS 上。这是 v5.12.0 中的疏忽,导致一些扩展无法构建。
修复了 stat() 中的几个内存泄漏。
修复了 Perl_rename()
中由于双重分配导致的内存泄漏。
修复了 vms_fid_to_name()
(由 realpath()
和 realname()
使用)中的内存泄漏。
Perl 5.12.2 代表了自 Perl 5.12.1 以来大约三个月的开发,包含了来自 36 位作者的 100 个文件中的大约 2,000 行更改。
得益于充满活力的用户和开发者社区,Perl 已经蓬勃发展了三十年。以下人员为 Perl 5.12.2 的改进做出了贡献。
Abigail,Ævar Arnfjörð Bjarmason,Ben Morrow,brian d foy,Brian Phillips,Chas. Owens,Chris 'BinGOs' Williams,Chris Williams,Craig A. Berry,Curtis Jewell,Dan Dascalescu,David Golden,David Mitchell,Father Chrysostomos,Florian Ragwitz,George Greer,H.Merijn Brand,Jan Dubois,Jesse Vincent,Jim Cromie,Karl Williamson,Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯,Leon Brocard,Maik Hentsche,Matt S Trout,Nicholas Clark,Rafael Garcia-Suarez,Rainer Tammer,Ricardo Signes,Salvador Ortiz Garcia,Sisyphus,Slaven Rezic,Steffen Mueller,Tony Cook,Vincent Pit 和 Yves Orton。
如果您发现疑似错误,请查看最近发布到 comp.lang.perl.misc 新闻组和 Perl 错误数据库 (http://rt.perl.org/perlbug/) 的文章。您也可以在 Perl 主页 (https://www.perl5.cn/) 找到相关信息。
如果您认为发现了一个未报告的错误,请运行您发行版中包含的 perlbug 程序。请务必将您的错误缩减为一个微小但充分的测试用例。您的错误报告以及 perl -V
的输出将被发送到 [email protected],由 Perl 移植团队进行分析。
如果您要报告的错误涉及安全问题,不适合发送到公开存档的邮件列表,请将其发送到 [email protected]。该地址指向一个封闭的订阅未存档邮件列表,其中包含所有核心提交者,他们可以帮助评估问题的影響,找到解决方案,并帮助协调在所有支持 Perl 的平台上发布补丁以缓解或修复问题。请仅将此地址用于 Perl 核心中的安全问题,不要用于独立分发在 CPAN 上的模块。
Changes 文件,其中解释了如何查看有关更改的详尽信息。
INSTALL 文件,其中介绍了如何构建 Perl。
README 文件,其中包含一般信息。
Artistic 和 Copying 文件,其中包含版权信息。