perl588delta - perl v5.8.8 的新功能
本文档描述了 5.8.7 版本和 5.8.8 版本之间的差异。
没有故意与 5.8.7 不兼容的更改。如果存在任何不兼容,则它们是错误,欢迎报告。
如果系统分别支持 fchdir
、fchmod
和 fchown
,则 chdir
、chmod
和 chown
现在可以作用于文件句柄以及文件名,这得益于 Gisle Aas 提供的补丁。
Attribute::Handlers
升级到版本 0.78_02
文档排版错误修复
attrs
升级到版本 1.02
仅内部清理
autouse
升级到版本 1.05
简化实现
B
升级到版本 1.09_01
B::
模块的继承层次结构已修正;B::NV
现在继承自 B::SV
(而不是 B::IV
)。
blib
升级到版本 1.03
文档排版错误修复
ByteLoader
升级到版本 0.06
内部清理
CGI
升级到版本 3.15
self_url()
中的额外 "?" 已移除
scrolling_list()
选择属性已修复
virtual_port
现在与 https 协议正常工作
upload_hook()
和 append()
现在在函数式模式下工作
POST_MAX
不会再导致客户端挂起
自动制表符索引现已禁用,并添加了新的 -tabindex
语义以重新启用自动索引
end_form()
不会发出空(且无效)的 <div>
CGI::Carp
在某些 mod_perl 配置中工作得更好
设置 $CGI::TMPDIRECTORY
现在有效
增强文档
charnames
升级到版本 1.05
viacode()
现在接受十六进制字符串,并且已优化。
CPAN
升级到版本 1.76_02
Win32 的 1 个小错误修复
Cwd
升级到版本 3.12
Win32 上的 canonpath()
现在可以正确地折叠 foo\.. 部分。
改进 Symbian OS 上的行为。
增强文档和排版错误修复
内部清理
Data::Dumper
升级到版本 2.121_08
已修复 Data::Dumper
有时会更新哈希的迭代器状态的问题
数字标签现在可以工作
内部清理
DB
升级到版本 1.01
已修复在调试器下运行时正则表达式引擎的状态有时会被破坏的问题。
DB_File
升级到版本 1.814
添加了对 Berkeley DB 4.4 的支持。
Devel::DProf
升级到 20050603.00 版本。
内部清理
Devel::Peek
升级到 1.03 版本。
内部清理
Devel::PPPort
升级到 3.06_01 版本。
改进了 --compat-version
参数检查。
默认情况下,命令行传递的文件会被过滤。
添加了 --nofilter
选项来覆盖过滤。
增强文档
diagnostics
升级到 1.15 版本。
文档排版错误修复
Digest
升级到 1.14 版本。
构造函数现在知道哪个模块实现了 SHA-224。
文档调整和排版错误修复。
Digest::MD5
升级到 2.36 版本。
现在使用 XSLoader
进行更快的加载。
增强了文档,包括最近发现的 MD5 弱点。
Dumpvalue
升级到 1.12 版本。
文档修复。
DynaLoader
升级了,但不幸的是我们无法增加它的版本号 :-(
在 Win32 上实现了 dl_unload_file
。
内部清理
合并了 XSLoader
0.06;对调用 bootstrap_inherit()
的小优化和文档增强。
Encode
升级到 2.12 版本。
现在 CHECK
可以接受一个代码引用!
在 ISO-8859-7 编码中添加了 3 个新字符。
添加了新的编码 MIME-Header-ISO_2022_JP
。
修复了部分字符和 encoding(utf-8-strict)
的问题。
文档增强和排版错误修复。
English
升级到 1.02 版本。
添加了 $COMPILING
变量。
ExtUtils::Constant
升级到 0.17 版本。
改进了与旧版本 perl 的兼容性。
ExtUtils::MakeMaker
升级到 6.30 版本(之前是 6.17)。
这里列出的内容太多;请参阅 http://search.cpan.org/dist/ExtUtils-MakeMaker/Changes
File::Basename
升级到 2.74 版本,其中包含 Michael Schwern 贡献的更改。
文档澄清并纠正了错误。
basename
现在在处理名称之前会删除尾部的路径分隔符。
basename
现在为参数 /
返回 /
,以使 basename
与同名 shell 工具保持一致。
如果后缀与名称中剩余的字符相同,则不再删除后缀,同样是为了与 shell 工具保持一致。
一些内部代码清理。
File::Copy
升级到 2.09 版本。
将文件复制到自身以前会失败。
现在,在文件系统之间移动文件会保留访问和修改时间戳
File::Find
升级到 1.10 版
Win32 可移植性修复
增强文档
File::Glob
升级到 1.05 版
内部清理
File::Path
升级到 1.08 版
mkpath
现在在 mkdir
失败时保留 errno
File::Spec
升级到 3.12 版
File::Spec->rootdir()
现在在 Win32 上返回 \
,而不是 /
$^O
有时会变得受污染。这个问题已修复。
Win32 上的 canonpath
现在会正确地折叠 foo/..
(或 foo\..
)部分,而不是像以前那样进行“误导性”的工作。请注意,Unix 上的 canonpath
仍然不会折叠这些部分,因为这样做是不正确的。
一些文档改进
一些内部代码清理
FileCache
升级到 1.06 版
文档中的 POD 格式错误已修复
Filter::Simple
升级到 0.82 版
FindBin
升级到 1.47 版
现在可以更好地处理访问权限比平时更严格的目录。
GDBM_File
升级到 1.08 版
内部清理
Getopt::Long
升级到 2.35 版
prefix_pattern
现在已由一个新的配置选项 long_prefix_pattern
补充,该选项允许用户指定哪些前缀模式应该应用长选项样式语义。
选项现在可以一次接受多个值(实验性)
各种错误修复
if
升级到 0.05 版
在列表上下文中调用 if
时,提供更有意义的错误消息。
恢复与早期版本的 perl 的向后兼容性
IO
升级到 1.22 版
增强文档
内部清理
IPC::Open2
升级到 1.02 版
增强文档
IPC::Open3
升级到 1.02 版
增强文档
List::Util
升级到 1.18 版(以前是 1.14 版)
修复 refaddr
的纯 Perl 版本,以避免对未祝福的引用进行祝福
使用 XSLoader
进行更快的加载
修复了各种内存泄漏
内部清理和可移植性修复
Math::Complex
升级到 1.35 版
atan2(0, i)
现在可以工作,所有(可计算的)复数参数情况也是如此
修复了 make
和 emake
中的某些错误
支持直接返回第 k 个根
在 emake
中支持 [2,-3pi/8]
支持 make
/emake
中的 inf
更明显地记录 make
/emake
Math::Trig
升级到版本 1.03
添加更多大圆例程:great_circle_waypoint
和 great_circle_destination
MIME::Base64
升级到版本 3.07
使用 XSLoader
进行更快的加载
增强文档
内部清理
NDBM_File
升级到版本 1.06
增强文档
ODBM_File
升级到版本 1.06
修复文档中的错别字
内部清理
Opcode
升级到版本 1.06
增强文档
内部清理
open
升级到版本 1.05
增强文档
overload
升级到版本 1.04
增强文档
PerlIO
升级到版本 1.04
PerlIO::via
现在可以正确地迭代层级
PerlIO::scalar
现在理解 $/ = ""
encoding(utf-8-strict)
现在可以处理部分字符
增强文档
内部清理
Pod::Functions
升级到版本 1.03
修复文档中的错别字
Pod::Html
升级到版本 1.0504
HTML 输出现在将正确链接到同一页面上的 =item
,并且应该是有效的 XHTML。
变量名按预期识别
修复文档中的错别字
Pod::Parser
升级到版本 1.32
允许以 =head
开头的文件作为第一行
Win32 移植修复
修复了 pod2usage
的退出状态
pod2usage
的新 -noperldoc
开关
现在允许任意 URL 方案
修复文档中的错别字
POSIX
升级到版本 1.09
修复文档中的错别字
内部清理
re
升级到版本 0.05
修复文档中的错别字
Safe
升级到版本 2.12
文档的轻微改进
SDBM_File
升级到版本 1.05
修复文档中的错别字
内部清理
Socket
升级到版本 1.78
内部清理
Storable
升级到版本 2.15
这包括 Adam Kennedy 添加的 STORABLE_attach
钩子功能,以及在 ithreads
下存储时更节俭的内存需求,通过使用 ithreads
克隆跟踪代码。
Switch
升级到版本 2.10_01
修复文档中的错别字
Sys::Syslog
升级到版本 0.13
现在提供数字宏和有意义的 Exporter
标签。
不再使用 Sys::Hostname
,因为它可能在未配置的网络环境中提供无用的值,因此改为直接使用 INADDR_LOOPBACK
。
syslog()
现在使用本地时间戳。
setlogmask()
现在表现得像它的 C 对应物。
setlogsock()
现在将按文档说明 croak()
。
改进的错误和警告消息。
改进的文档。
Term::ANSIColor
升级到版本 1.10
修复了 colored
中的一个错误,当 $EACHLINE
设置时,会导致它无法对仅包含 0(字面上的零)的行进行着色。
改进的测试。
Term::ReadLine
升级到版本 1.02
文档调整
Test::Harness
升级到版本 2.56(之前是 2.48)
Test::Harness
计时器现在默认关闭。
现在显示以毫秒为单位的经过时间。
各种错误修复
Test::Simple
升级到版本 0.62(之前是 0.54)
is_deeply()
现在不再在许多情况下无法正常工作
各种小错误修复
文档增强
Text::Tabs
升级到版本 2005.0824
提供更快的 expand
实现
Text::Wrap
升级到版本 2005.082401
添加了 $Text::Wrap::separator2
,它允许您保留现有的换行符,但使用其他字符串添加换行符。
threads
升级到版本 1.07
threads
现在将遵守 no warnings 'threads'
线程的解释器现在将在 $t->join()
之后释放,而不是在 undef $t
之后释放,这应该可以修复一些 ithreads
内存泄漏。(由 Dave Mitchell 修复)
一些文档排版错误修复。
threads::shared
升级到版本 0.94
仅文档更改
注意:CPAN 上提供了一个改进的 threads::shared
实现 - 如果它被证明是稳定的,它将被合并到 5.8.9 中。
Tie::Hash
升级到版本 1.02
修复文档中的错别字
Time::HiRes
升级到版本 1.86(之前是 1.66)
添加了 clock_nanosleep()
和 clock()
函数
已添加对 POSIX clock_gettime()
和 clock_getres()
的支持
如果 C gettimeofday()
函数失败,则返回 undef
或空列表
改进的 nanosleep
检测
内部清理
增强文档
Unicode::Collate
升级到版本 0.52
现在实现了 UCA 修订版 14(基于 Unicode 4.1.0)。
Unicode::Collate->new
方法不再覆盖用户的 $_
增强文档
Unicode::UCD
升级到版本 0.24
修复文档中的错别字
User::grent
升级到版本 1.01
修复文档中的错别字
utf8
升级到版本 1.06
修复文档中的错别字
vmsish
升级到版本 1.02
修复文档中的错别字
warnings
升级到版本 1.05
更温和地处理 Carp::
内部
内部清理
文档更新
Win32
升级到版本 0.2601
为 Win32::GetOSName
提供 Windows Vista 支持
文档增强
XS::Typemap
升级到版本 0.02
内部清理
h2xs
增强功能h2xs
实现新的选项 --use-xsloader
,即使在向后兼容的模块中也强制使用 XSLoader
。
已修复对包含撇号的作者名称的处理。
现在跳过任何具有负值的枚举。
perlivp
增强功能perlivp
实现新的选项 -a
,并且不再默认检查 *.ph 文件。使用 -a
选项运行所有测试。
该 perlglossary 手册页是 Perl 文档中使用的术语的词汇表,包括技术术语和其他术语,由 O'Reilly Media, inc. 友情提供。
弱引用创建现在是 O(1) 而不是 O(n),感谢 Nicholas Clark。弱引用删除仍然是 O(n),但如果删除只发生在程序退出时,它可能会被完全跳过。
Salvador Fandiño 提供了改进,以减少 sort
的内存使用量,并加快某些情况下的速度。
Jarkko Hietaniemi 和 Andy Lester 努力在 C 源文件中尽可能多地将数据标记为 static
,以增加可执行文件可以由操作系统在进程之间共享的比例,从而减少多用户系统上的实际内存使用量。
并行 make 现在应该可以正常工作,尽管如果 make test
被指示并行运行,仍然可能存在问题。
使用 Borland 编译器在 Win32 上构建应该更加顺利。特别是 Steve Hay 努力绕过了他们的编译器发出的许多警告,以及至少一个 C 编译器内部错误。
Configure
现在将检测 clearenv
和 unsetenv
,感谢 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 中省略了)。
以前,当通过 -w
在全局范围内启用警告时,选择性地禁用特定警告类别实际上会关闭所有警告。现在已修复;现在 no warnings 'io';
只会关闭 io
类中的警告。以前它会错误地关闭所有警告。
此错误修复可能会导致某些程序开始正确发出警告。
Perl 5.8.4 引入了一个更改,以便将 undef
分配给标量,或将空列表分配给数组或哈希,都被优化掉了。由于这会导致 goto
跳转出现问题,因此已撤消此更改。
在某些特定情况下,使用带有某些格式的 sprintf() 函数会导致缓冲区溢出。此问题已修复,以及其他几个错误,特别是在边界检查方面。
在相关的修复中,如果编写不当的代码没有遵循 Sys::Syslog
文档,则可能存在格式漏洞。Sys::Syslog
已更改以保护用户免受低质量第三方代码的影响。
据报道,在处理 Unicode 数据时在 perl 调试器下运行会导致意外的巨大速度下降。Nicholas Clark 确定并修复了最有可能导致此问题的原因。
FindBin
现在可以更好地处理访问权限比平时更严格的目录。
已修复 ithreads 中的几个内存泄漏。CPAN 上提供了一个改进的 threads::shared
实现 - 如果它被证明是稳定的,它将被合并到 5.8.9 中。
现在从 $!
和 $^E
中修剪尾随空格。
需要 perl 读取进程组列表的操作(例如读取 $(
和 $)
)现在动态分配内存,而不是使用固定大小的数组。固定大小的数组可能会在配置为使用大量组的系统上导致 C 栈耗尽。
PerlIO::scalar
现在可以更好地处理非默认 $/
设置。
现在可以使用 x
运算符重复 qw//
列表。这以前会引发语法错误。
调试器现在可以正确跟踪包含 #line 指令的 eval("")uated 代码中的执行。
open
pragma 的值不再被三个参数打开忽略。
在 perl 5.8.6 中引入的 for (reverse @a)
优化在数组具有未定义元素并在 LVALUE 上下文中使用时可能会出现故障。Dave Mitchell 提供了一个修复程序。
某些 UTF-8 编码数据和 8 位正则表达式之间的不区分大小写的匹配(反之亦然)可能会给出格式错误的字符警告。这些问题已由 Dave Mitchell 和 Yves Orton 修复。
lcfirst
和 ucfirst
可能会在字符串的小写、大写或标题大小写形式的 UTF-8 编码长度不同的某些情况下损坏字符串。此问题已由 Nicholas Clark 修复。
如果存在,Perl 现在将使用 C 库调用 unsetenv
和 clearenv
来删除 %ENV
中的键并完全删除 %ENV
,这要归功于 Alan Burlison 的补丁。
这是一个新的警告,在类似这样的情况下产生。
$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
的调用次数,而不会实际使用任何额外的内存。
HV
的 HE*
数组现在以正确的(最小)大小分配,这要归功于 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 文件。
有关版权信息,请参阅 Artistic 和 Copying 文件。