内容

名称

perl584delta - perl v5.8.4 的新增功能

说明

本文档介绍了 5.8.3 版本和 5.8.4 版本之间的差异。

不兼容的更改

许多小错误已得到修复。碰巧依赖于以前错误行为的脚本会将这些修复视为不兼容的更改 :-) 建议您对此版本执行充分的验收测试,以确保在将此版本投入生产之前不会影响您。

Carp 的诊断输出已略作更改,以便在参数之间的逗号后添加一个空格。这使得诸如 Web 浏览器之类的工具可以更轻松地对其进行包装,但可能会混淆执行 Carp 输出详细解析的任何自动工具。

内部转储输出已得到改进,以便非可打印字符(例如换行符和退格符)以 \x 符号输出,而不是八进制。这可能会混淆解析 Devel::Peek 等模块输出的非鲁棒工具。

核心增强功能

Malloc 包装

现在可以构建 Perl 以检测尝试分配病态大块内存的情况。以前,此类分配在大小计算期间会遭受整数环绕,从而导致分配错误,这将使 perl 崩溃,并且理论上可用于“堆栈破坏”攻击。包装在已知有效(大多数 AIX 配置、BSDi、Darwin、DEC OSF/1、FreeBSD、HP/UX、GNU Linux、OpenBSD、Solaris、VMS 和大多数 Win32 编译器)的平台上默认为启用,而在其他平台上默认为禁用。

Unicode 字符数据库 4.0.1

Perl 5.8 中包含的 Unicode 字符数据库副本已从 4.0.0 更新到 4.0.1。

suidperl 不那么不安全

Paul Szabo 分析并修补了 suidperl 以消除已知的现有不安全性。目前 suidperl 中没有已知漏洞,但之前的经验表明我们不能确信这些是最后一个。您可能无法再直接调用 set uid perl,因此为了保持与调用 #!/usr/bin/suidperl 的脚本的向后兼容性,现在唯一的 set uid 二进制文件是 sperl5.8.n(对于此版本为 sperl5.8.4)。suidperl 被安装为指向 perl 的硬链接;suidperlperl 都将自动调用 sperl5.8.4 set uid 二进制文件,因此此更改应该是完全透明的。

对于新项目,核心 perl 团队强烈建议您使用专用单用途安全工具(例如 sudo),而不是 suidperl

format

除了错误修复之外,format 的功能也得到了增强。请参阅 perlform

模块和 Pragmata

核心模块和文档中/tmp的(误)用已得到整理。一些在 Perl 核心和 CPAN 中都可用的模块(“双生模块”)尚未应用这些更改;随着模块在 CPAN 上更新,这些更改将集成到未来的稳定 Perl 版本中。

已更新模块

Attribute::Handlers
B
Benchmark
CGI
Carp
Cwd
Exporter
File::Find
IO
IPC::Open3
Local::Maketext
Math::BigFloat
Math::BigInt
Math::BigRat
MIME::Base64
ODBM_File
POSIX
Shell
Socket

对 Linux 抽象 Unix 域套接字提供实验性支持。

Storable
Switch

与 CPAN 版本 2.10 同步

Sys::Syslog

syslog() 现在除了字符串外,还可以使用数字常量表示设备名称和优先级。

Term::ANSIColor
Time::HiRes
Unicode::UCD
Win32

Win32.pm/Win32.xs 已从 libwin32 模块移至 Perl 核心

base
open
threads

现在 Windows 上也支持分离线程。

utf8

性能增强

实用程序更改

Perl 调试器 (lib/perl5db.pl) 现在可以保存所有调试器命令以供以后使用,并且可以显示给定类的父级继承树。

安装和配置改进

VMS 和 Windows 上的构建过程已经进行了多项次要改进。在 Windows 上,Borland 的 C 编译器现在可以使用 PerlIO 和/或 USE_LARGE_FILES 编译 perl。

Windows 上的perl.exe现在有一个“骆驼”徽标图标。在 Perl 主题中使用骆驼是 O'Reilly and Associates Inc. 的商标,并且在征得其许可后使用(即分发源代码、从中编译 Windows 可执行文件,并在本地使用该可执行文件)。明确未涵盖将提供的骆驼用于 perl 可执行文件的图标以外的任何用途,并且任何希望重新分发带有图标的 perl 二进制文件的人员都应事先直接与 O'Reilly 联系。

Perl 应该再次在 Stratus VOS 上干净地构建。

选定的错误修复

修复了更多 utf8 错误,特别是chompchopsendsyswrite与 utf8 数据交互的方式。当use bytes;在范围内时,串联现在可以正常工作。

现在将语用正确传播到正则表达式中的 (?{...}) 构造中。例如,以下代码

my $x = qr{ ... (??{ $x }) ... };

现在将在 use strict 下(正确地)失败。(因为内部$x是并且一直指代$::x

对于已优化布尔表达式(例如5 || print;)中的常量,已取消“void 上下文中的常量”警告。

perl -i可能会错误地fchmod(stdin)。如果 stdin 连接到终端并且 perl 以 root 身份运行,则这是严重的。现在已修复。

新的或已更改的诊断

CarpDevel::Peek使用的内部诊断例程已经变得更加清晰,如“不兼容的更改”中所述

已更改的内部

哈希内部中的一些错误已经修复。受限哈希及其占位符现在在略微不同的时间分配和删除,但这对于用户代码来说应该是不可见的。

未来方向

下一个维护版本 (5.8.5) 的代码冻结将于 2004 年 6 月 30 日进行,并于 7 月中旬发布。

特定于平台的问题

已知此版本无法在 Windows 95 上构建。

报告错误

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

如果您认为自己发现了未报告的错误,请运行发行版中包含的 perlbug 程序。确保将错误精简为一个微小但充分的测试用例。您的错误报告以及 perl -V 的输出将被发送至 [email protected],供 Perl 移植团队分析。您可以在 http://bugs.perl.org/ 浏览和搜索 Perl 5 错误

另请参阅

Changes 文件,详细说明了更改的内容。

INSTALL 文件,说明如何构建 Perl。

README 文件,用于一般内容。

ArtisticCopying 文件,用于版权信息。