perl587delta - perl v5.8.7 的新增功能
本文档介绍了 5.8.6 版本和 5.8.7 版本之间的差异。
没有与 5.8.6 不兼容的更改。
Perl 5.8 中包含的 Unicode 字符数据库的副本已从 4.0.1 更新到 4.1.0。有关显着更改,请参阅 http://www.unicode.org/versions/Unicode4.1.0/#NotableChanges。
suidperl
中涉及调试代码的一对漏洞已关闭。
对于新项目,核心 Perl 团队强烈建议您使用专用单一用途安全工具,例如 sudo
,而不是 suidperl
。
Perl 解释器可以构建为允许使用站点自定义脚本。默认情况下,这未启用,以与以前的 Perl 版本保持一致。要使用此功能,请在运行 Configure
脚本时将 -Dusesitecustomize
添加到命令行标志。另请参阅 perlrun 中的“ -f”。
Config.pm
现在小得多。Config.pm
现在约为 3K,而不是 32K,不常用的代码和 %Config
值按需加载。这对程序员来说是透明的,但意味着大多数代码将节省解析和加载 29K 的脚本(例如,使用 File::Find
的代码)。
B 升级到版本 1.09
base 升级到版本 2.07
bignum 升级到版本 0.17
bytes 升级到版本 1.02
Carp 升级到版本 1.04
CGI 升级到版本 3.10
Class::ISA 升级到版本 0.33
Data::Dumper 升级到版本 2.121_02
DB_File 升级到版本 1.811
Devel::PPPort 升级到版本 3.06
Digest 升级到版本 1.10
Encode 升级到版本 2.10
FileCache 升级到版本 1.05
File::Path 升级到版本 1.07
File::Temp 升级到版本 0.16
IO::File 升级到版本 1.11
IO::Socket 升级到版本 1.28
Math::BigInt 升级到版本 1.77
Math::BigRat 升级到版本 0.15
overload 升级到版本 1.03
PathTools 升级到版本 3.05
Pod::HTML 升级到版本 1.0503
Pod::Perldoc 升级到版本 3.14
Pod::LaTeX 升级到版本 0.58
Pod::Parser 升级到版本 1.30
Symbol 升级到版本 1.06
Term::ANSIColor 升级到版本 1.09
Test::Harness 升级到版本 2.48
Test::Simple 升级到版本 0.54
Text::Wrap 升级到版本 2001.09293,以修复当 wrap() 被调用时使用非空格分隔符的错误。
threads::shared 升级到版本 0.93
Time::HiRes 升级到版本 1.66
Time::Local 升级到版本 1.11
Unicode::Normalize 升级到版本 0.32
utf8 升级到版本 1.05
Win32 已升级到 0.24 版本,其中提供了 Win32::GetFileVersion
find2perl
具有新的选项 -iname
、-path
和 -ipath
。
现在,在 ithreads 克隆期间使用的内部指针映射哈希使用内存分配竞技场。在测试中,这将 ithreads 克隆时间减少了大约 10%。
Win32 “dmake” makefile.mk 已更新,以使其与最新版本的 dmake 兼容。
PERL_MALLOC
、DEBUG_MSTATS
、PERL_HASH_SEED_EXPLICIT
和 NO_HASH_SEED
现在应该可以在 Win32 makefile 中工作。
Win32 上的 socket() 函数已修复,使其能够再次使用指定协议为 0(表示允许任何协议)的传输提供程序。(此问题在 5.8.6 中已修复,并且通常会导致使用 ICMP 套接字失败。)
由错误的内部偏移量缓存引起的涉及 substr
和 UTF-8 的另一个模糊错误已得到识别并修复。
已修复正则表达式引擎加载 UTF-8 表时出现的一个错误 - 诸如 "\x{100}" =~ /[[:print:]]/
的代码将不再给出损坏的结果。
对长 Unicode 字符串执行诸如 uc
之类的转换操作可能会耗尽内存。此问题已修复。
对于 Unicode 和非 Unicode 数据的某些组合,index
/rindex
存在错误。此问题已修复。
从面向字节的文件句柄读入 UTF-8 标量时,read
(以及可能是 sysread
)会公开 UTF-8 内部信息。此问题已修复。
几个 pack
/unpack
错误修复
格式为 b
或 B
的校验和已损坏。
unpack
校验和可能会溢出 C
格式。
U0
和 C0
现在适用于 ()
pack
子模板。
计数长度前缀现在不会更改 C0
/U0
模式。
pack
Z0
用于销毁前一个字符。
P
/p
pack
格式用于仅识别文字 undef
将闭包与 ithreads 一起使用可能会导致 perl 崩溃。这是由于无法正确锁定内部 OP 结构,并且已修复。
close
的返回值现在可以正确反映在刷新句柄数据时发生的任何文件错误,而不仅仅是在实际底层文件关闭操作失败时给出失败。
not() || 1
用于段错误。not()
现在表现得像 not(0)
,这是 5.6.0 之前的行为。
h2ph
针对头文件中导致输出不正确或无效的构造进行了各种增强。
新增了一个污染错误,“%ENV 别名为 %s”。当启用污染检查且 *ENV
已别名时,会引发此错误,因此 %ENV
不再具有 env-magic,因此无法验证环境是否无污染。
pack
和 unpack
的内部已更新。所有合法的模板都应像以前一样工作,但对于复杂的故障情况,报告的错误可能会有所变化。非错误情况下的任何行为更改都是错误,应报告。
C
源代码已经过大量重构,部分是为了使其更简洁、更易于维护。生成的对象代码和 perl
二进制文件可能远小于 5.8.6,并且在某些情况下有望更快,但除此之外,不应该有任何用户可检测到的更改。
已添加 ${^UTF8LOCALE}
,以便 perl 空间可以访问 PL_utf8locale
。
现在可以在编译时更改用于分配 SV 头和大多数 SV 主体的竞技场的大小。旧大小为 1008 字节,新默认大小为 4080 字节。
从重载运算符返回的 Unicode 字符串可能存在错误。这是一个自 5.8.6 发布以来报告的长期错误,但我们还没有一个合适的修复程序。
在 UNICOS 上,lib/Math/BigInt/t/bigintc.t 挂起并占用 CPU。ext/B/t/bytecode.t 和 ext/Socket/t/socketpair.t 两个测试都失败。这些问题不太可能得到解决,因为我们英勇的 UNICOS 移植人员的最后一台 Cray 正在退役。
如果您发现您认为是错误的内容,您可以在 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 文件,详细说明了更改的内容。
INSTALL 文件,用于了解如何构建 Perl。
README 文件,用于了解一般内容。
Artistic 和 Copying 文件,用于了解版权信息。