内容

名称

perl583delta - perl v5.8.3 的新功能

描述

本文档描述了 5.8.2 版本和 5.8.3 版本之间的差异。

如果您要从早期版本(如 5.6.1)升级,请先阅读 perl58delta,其中描述了 5.6.0 和 5.8.0 之间的差异,以及 perl581deltaperl582delta,其中描述了 5.8.0、5.8.1 和 5.8.2 之间的差异。

不兼容的更改

与 5.8.2 没有不兼容的更改。

核心增强

现在,绑定哈希可以使用 SCALAR 方法。当绑定哈希在标量上下文中使用时,例如

    if (%tied_hash) {
	...
    }

旧的行为是 %tied_hash 会返回在哈希绑定之前(通常为 0)该哈希返回的值。在没有 SCALAR 方法的情况下,新行为是在 each 迭代过程中返回 TRUE,否则调用 FIRSTKEY 检查哈希是否为空(确保后续的 each 也将从调用 FIRSTKEY 开始)。有关完整细节和注意事项,请参阅 "perltie 中的 SCALAR"

模块和语义

CGI
Cwd
Digest
Digest::MD5
Encode
File::Spec
FindBin

提供了一个函数 again 来解决不同目录中的模块希望使用 FindBin 的问题。

List::Util

现在可以将引用弱化为只读值。

Math::BigInt
PodParser
Pod::Perldoc
POSIX
Unicode::Collate
Unicode::Normalize
Test::Harness
threads::shared

cond_wait 有一个新的两个参数形式。添加了 cond_timedwait

实用程序更改

find2perl 现在默认情况下假设 -print。以前,需要显式指定它。

一个新的实用程序 prove 使得在命令行运行单个回归测试变得容易。prove 是 Test::Harness 的一部分,早期 Perl 版本的用户可以从 CPAN 安装它。

新文档

文档在某些地方进行了修改,以生成更标准的手册页。

特殊代码块(BEGIN、CHECK、INIT、END)的文档已改进。

安装和配置改进

Perl 现在可以在 OpenVMS I64 上构建

选定的错误修复

对 UTF8 字符串使用 substr() 可能会导致对该字符串的后续访问返回垃圾。这是由于缓存了不正确的 UTF8 偏移量,现在已修复。

当同一个 join() 语句用于处理先前处理过 UTF8 数据的 8 位数据时,join() 可能会返回垃圾,因为该语句临时工作区的标志没有正确重置。现在已修复。

$a .. $b 现在在 $a 或 $b 为 undef 时将按预期工作。

使用 Unicode 键绑定哈希现在应该可以正常工作。

读取 $^E 现在会保留 $!。之前,实现 $^E 的 C 代码没有保留 errno,因此读取 $^E 可能会导致 errno 以及 $! 意外更改。

可重入函数将(再次)与 C++ 一起使用。5.8.2 引入了一个错误修复,意外地破坏了用 C++ 编写的 Perl 扩展的编译。

新的或更改的诊断

致命错误“DESTROY 创建了对已死对象的新的引用”现在已在 perldiag 中记录。

更改的内部结构

哈希代码已重构以减少源代码重复。外部接口保持不变,除了上面描述的错误修复之外,行为应该没有变化。

hv_clear_placeholders 现在是 perl API 的一部分。

一些 C 宏已被整理。特别是创建临时局部变量的宏现在更具防御性地命名这些变量,这应该避免名称冲突的错误。

<signal.h> 现在始终包含。

配置和构建

Configure 现在无论变量的值如何都会调用回调。以前,回调只在 case $variable $define) 分支中调用。此更改应该只影响编写配置提示文件的平台维护人员。

平台特定问题

回归测试 ext/threads/shared/t/wait.t 在早期 RedHat 9 和 HP-UX 10.20 上失败,因为它们的线程实现存在错误。RedHat 用户应该查看 https://rhn.redhat.com/errata/RHBA-2003-136.html 并考虑升级他们的 glibc。

已知问题

Windows 上尚不支持分离线程,因为它们可能会导致内存访问冲突问题。

suidperl 中打开脚本时存在已知的竞争条件。suidperl 默认情况下既不构建也不安装,并且自 perl 5.8.0 以来已被弃用。建议您用 sudo 等工具(http://www.courtesan.com/sudo/)替换 suidperl 的使用。

我们积压了大量未解决的错误。处理错误和错误报告是一项乏味的工作;不是理想的志愿者工作,但这是我们所拥有的一切。

perl5 开发团队正在实施更改以帮助解决此问题,这些更改将在 2004 年初生效。

未来方向

下一个维护版本 (5.8.4) 的代码冻结时间为 2004 年 3 月 31 日,预计在 4 月中旬发布。类似地,5.8.5 的冻结时间将在 6 月底,并在 7 月中旬发布。

讣告

Iain 'Spoon' Truskett,Perl 黑客,perlreref 作者和 CPAN 贡献者,于 2003 年 12 月 29 日突然去世,享年 24 岁。我们将怀念他。

报告错误

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

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

另请参阅

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

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

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

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