内容

名称

perl588delta - perl v5.8.8 的新功能

描述

本文档描述了 5.8.7 版本和 5.8.8 版本之间的差异。

不兼容的更改

没有故意与 5.8.7 不兼容的更改。如果存在任何不兼容,则它们是错误,欢迎报告。

核心增强

模块和语义

实用程序更改

h2xs 增强功能

h2xs 实现新的选项 --use-xsloader,即使在向后兼容的模块中也强制使用 XSLoader

已修复对包含撇号的作者名称的处理。

现在跳过任何具有负值的枚举。

perlivp 增强功能

perlivp 实现新的选项 -a,并且不再默认检查 *.ph 文件。使用 -a 选项运行所有测试。

新文档

perlglossary 手册页是 Perl 文档中使用的术语的词汇表,包括技术术语和其他术语,由 O'Reilly Media, inc. 友情提供。

性能增强

安装和配置改进

并行 make 现在应该可以正常工作,尽管如果 make test 被指示并行运行,仍然可能存在问题。

使用 Borland 编译器在 Win32 上构建应该更加顺利。特别是 Steve Hay 努力绕过了他们的编译器发出的许多警告,以及至少一个 C 编译器内部错误。

Configure 现在将检测 clearenvunsetenv,感谢 Alan Burlison 的补丁。它还将探测 futimes 以及 sprintf 是否正确返回格式化字符串的长度,这些都将在 perl 5.8.9 中使用。

next-3.0、vmesa、IX、Darwin、Solaris、Linux、DEC/OSF、HP-UX 和 MPE/iX 有改进的提示

Windows 上的 Perl 扩展现在可以静态构建到 Perl DLL 中,感谢 Vadim Konovalov 的工作。(这项改进实际上是在 5.8.7 中,但意外地从 perl587delta 中省略了)。

选定的错误修复

no warnings 'category' 与 -w 一起正常工作

以前,当通过 -w 在全局范围内启用警告时,选择性地禁用特定警告类别实际上会关闭所有警告。现在已修复;现在 no warnings 'io'; 只会关闭 io 类中的警告。以前它会错误地关闭所有警告。

此错误修复可能会导致某些程序开始正确发出警告。

删除过度优化

Perl 5.8.4 引入了一个更改,以便将 undef 分配给标量,或将空列表分配给数组或哈希,都被优化掉了。由于这会导致 goto 跳转出现问题,因此已撤消此更改。

sprintf() 修复

在某些特定情况下,使用带有某些格式的 sprintf() 函数会导致缓冲区溢出。此问题已修复,以及其他几个错误,特别是在边界检查方面。

在相关的修复中,如果编写不当的代码没有遵循 Sys::Syslog 文档,则可能存在格式漏洞。Sys::Syslog 已更改以保护用户免受低质量第三方代码的影响。

调试器和 Unicode 速度变慢

据报道,在处理 Unicode 数据时在 perl 调试器下运行会导致意外的巨大速度下降。Nicholas Clark 确定并修复了最有可能导致此问题的原因。

较小的修复

新的或更改的诊断

尝试设置已释放数组的长度

这是一个新的警告,在类似这样的情况下产生。

$r = do {my @a; \$#a};
$$r = 503;

非字符串作为位掩码传递

这是一个新的警告,当数字作为参数传递给 select(),而不是位掩码时产生。

# Wrong, will now warn
$rin = fileno(STDIN);
($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);

# Should be
$rin = '';
vec($rin,fileno(STDIN),1) = 1;
($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);

搜索模式未终止或三元运算符被解析为搜索模式

此语法错误表明词法分析器无法找到 ?PATTERN? 结构的最终分隔符。在错误消息中提及三元运算符可以更轻松地诊断语法错误。

内部更改

C 源代码已经过相当程度的重构,部分是为了使其更整洁,更易于维护。生成的代码和 perl 二进制文件可能比 5.8.7 更小,特别是由于 Dave Mitchell 贡献的更改,该更改重新设计了警告代码,使其明显更小。除了更小,可能更快之外,应该没有用户可检测到的更改。

Andy Lester 提供了许多改进,以确定哪些函数参数和局部变量实际上可以被声明为 const 到 C 编译器。Steve Peters 提供了新的 *_set 宏,并重新设计了核心以使用这些宏,而不是在 LVALUE 上下文中分配给宏。

Dave Mitchell 在 -DT 下改进了词法分析器调试输出。

Nicholas Clark 更改了字符串缓冲区分配,使其现在向上舍入到下一个 4 的倍数(或在具有 64 位指针的平台上为 8)。这应该减少对 realloc 的调用次数,而不会实际使用任何额外的内存。

HVHE* 数组现在以正确的(最小)大小分配,这要归功于 Nicholas Clark 的另一个更改。使用 -DPERL_USE_LARGE_HV_ALLOC 编译以使用旧的、更松散的默认值。

出于 XS 或嵌入式调试目的,如果 perl 使用 -DDEBUG_LEAKING_SCALARS_FORK_DUMP 以及 -DDEBUG_LEAKING_SCALARS 编译,则在全局销毁之前会 fork 一个子进程,该进程用于显示在全局销毁结束时发现泄漏的任何标量的值。如果没有这个,标量在检测时已经足够释放,以至于不可能生成任何有意义的转储内容。此功能由不知疲倦的 Nicholas Clark 实现,基于 Mike Giroux 的想法。

平台特定问题

在使用 HP C-ANSI-C 时,HP-UX 11.23(Itanium 2)上的优化器目前部分禁用(缩减到 +O1);在更高优化级别出现问题的原因尚不清楚。

在 VMS 上还有一些测试失败,这主要是由于测试修复和次要模块调整,这些调整有太多依赖项无法集成到此版本中,而这些依赖项已在开发流中得到纠正。以下是已知修复程序补丁号的预期失败列表

ext/Devel/PPPort/t/ppphtest.t  #26913
ext/List/Util/t/p_tainted.t    #26912
lib/ExtUtils/t/PL_FILES.t      #26813
lib/ExtUtils/t/basic.t         #26813
t/io/fs.t
t/op/cmp.t

报告错误

如果您发现疑似错误,请查看最近发布到 comp.lang.perl.misc 新闻组的文章和 Perl 错误数据库 http://bugs.perl.org。您也可以在 Perl 主页 https://www.perl5.cn 找到相关信息。

如果您认为发现了一个未报告的错误,请运行您发布版本中包含的 perlbug 程序。请务必将您的错误缩减为一个微小但足以测试的案例。您的错误报告以及 perl -V 的输出将被发送到 [email protected],由 Perl 移植团队进行分析。您可以在 http://bugs.perl.org/ 浏览和搜索 Perl 5 错误。

另请参阅

有关更改的详细信息,请参阅 Changes 文件。

有关如何构建 Perl 的信息,请参阅 INSTALL 文件。

有关一般信息,请参阅 README 文件。

有关版权信息,请参阅 ArtisticCopying 文件。