这是命令 perl58delta 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
perl58delta - perl v5.8.0 的新功能
商品描述
本文档描述了 5.6.0 版本和 5.8.0 版本之间的差异。
5.8.0 中的许多错误修复已经在 5.6.1 维护版本中看到
这两个版本保持密切协调(而 5.8.0 仍然被称为
5.7.某事)。
集成到 5.6.1 版本中的更改标记为“[561]”。 其中许多
自 5.6.1 发布以来,更改得到了进一步发展,这些更改被标记为“[561+]”。
您可以看到 5.6.1 版本(来自 5.005_03 版本和
5.6.0 版本)通过阅读 perl561delta。
亮点 In 5.8.0
· 更好的 Unicode 支持
· 新的IO实现
· 新线程实现
· 更好的数值精度
· 安全信号
· 许多新模块
· 更广泛的回归测试
不相容 更改
二进制 配伍禁忌
Perl的 5.8 is 而不去 二进制 兼容 - 早期 发布 of 珀尔。
您 它们在许多情况下都能提供类似的结果。 至 重新编译 您的 XS 模块。
(纯 Perl 模块应该继续工作。)
不连续的主要原因是称为 PerlIO 的新 IO 架构。 PerlIO
是默认配置,因为没有它,Perl 5.8 的许多新特性就无法实现
用过的。 换句话说:您只需要重新编译包含 XS 代码的模块,抱歉
关于那个。
在 Perl 的未来版本中,不支持 PerlIO 的 XS 模块可能会完全不受支持。
然而,这对于模块作者来说应该不会太难:PerlIO 被设计为
stdio 接口的直接替换(在源代码级别)。
根据您的平台,我们决定破解二进制文件还有其他原因
兼容性,请继续阅读。
64 bit 平台 和 分配
如果您的指针是 64 位宽,则不再使用 Perl malloc,因为它确实
不适用于 8 字节指针。 此外,通常系统在这些平台上的 mallocs
比 Perl malloc 更好地针对如此大的内存模型进行了优化。 一些记忆——
饥饿的 Perl 应用程序(如 PDL)不能很好地与 Perl 的 malloc 配合使用。 最后,其他
应用程序比 Perl(如 mod_perl)更倾向于系统 malloc。 这样的
平台包括 Alpha 和 64 位 HPPA、MIPS、PPC 和 Sparc。
AIX 动态加载
AIX 动态加载现在在 AIX 版本 4.3 和更新版本中使用
AIX 而不是旧的模拟接口。 这种变化可能会倒退
与编译模块的兼容性。 进行了更改以使 Perl 更符合
其他使用 AIX 本机接口的应用程序,如 mod_perl。
Attributes “我的” 变量 现在 处理 at 运行时间
“my EXPR : ATTRS”语法现在在运行时应用变量属性。 (子程序和
“我们的”变量仍然在编译时应用属性。)请参阅属性
额外细节。 然而,特别是这允许变量属性有用
对于“tie”接口,这是早期版本的一个缺陷。 请注意,新
语义不适用于 Attribute::Handlers 模块(从 0.76 版开始)。
插座 延期 动态 in VMS
Socket 扩展现在是动态加载的,而不是静态内置的。这
可能是也可能不是 VMS 的古老 TCP/IP 堆栈的问题:我们不知道,因为我们
无法在此类配置中测试 Perl。
IEEE 格式 漂浮的 点 默认 on OpenVMS的 阿尔法
Perl 现在使用 IEEE 格式 (T_FLOAT) 作为默认的内部浮点格式
OpenVMS Alpha,可能会破坏与外部库的二进制兼容性或
现有数据。 G_FLOAT 仍可用作配置选项。 VAX 上的默认设置
(D_FLOAT) 没有改变。
全新 统一 语义 (不 更多 “用 utf8", 几乎)
以前在 Perl 5.6 中使用 Unicode 会说“使用 utf8”然后操作
(如字符串连接)在该词法范围内是 Unicode 感知的。
发现这是一个不方便的接口,并且在 Perl 5.8 中,Unicode 模型具有
完全改变了:现在“Unicodeness”绑定到数据本身,并且对于大多数
根本不需要“使用utf8”的时间。 “使用 utf8”的唯一剩余用途是
Perl 脚本本身是用 Unicode 的 UTF-8 编码编写的。 (UTF-8 还没有
设为默认值,因为有许多 Perl 脚本使用不同的
国家八位字符集,这在 UTF-8 中是非法的。)
有关当前模型的解释,请参阅 perluniintro,有关当前使用的 utf8
utf8 编译指示。
全新 统一 查看房源
统一 脚本 现在支持。 脚本类似于(并优于)Unicode
块. 脚本和块之间的区别在于脚本是
语言或一组语言,而块是更多的人为分组
(大部分)基于 Unicode 编号的 256 个字符。
一般来说,脚本更具包容性,但并非普遍如此。 例如,虽然
脚本“拉丁语”包括所有拉丁字符及其各种变音符号装饰
版本,它不包括各种标点符号或数字(因为它们不仅仅是
“拉丁”)。
现在支持许多其他属性,包括“\p{L&}”、“\p{Any}”
"\p{Assigned}", "\p{Unassigned}", "\p{Blank}" [561] 和 "\p{SpacePerl}" [561](连同
他们的“\P{...}”版本,当然)。 有关详细信息和更多附加内容,请参阅 perlunicode。
与“\p{...}”和“\P{...}”一起使用的名称的“In”或“Is”前缀现在几乎是
总是可选的。 唯一的例外是需要“In”前缀来表示 Unicode
当块名称与脚本名称冲突时阻止。 例如,“\p{藏语}”是指
脚本,而 "\p{InTibetan}" 指的是块。 当没有名称冲突时,您
可以省略块名称中的“In”(例如“\p{BraillePatterns}”),但为了安全起见,它是
可能最好总是使用“In”)。
参考(...) 代替 Of 标量(...)
对引用的引用现在字符串化为“号(0x81485ec)" 而不是
"标量(0x81485ec)" 以便与返回值更一致 参考().
打包/解包 D / F 回收
未记录的打包/解包模板字母 D/F 已被回收以更好地使用:现在
它们代表 long double(如果平台支持)和 NV(Perl 内部浮动
点类型)。 (它们曾经是 d/f 的别名,但你永远不知道。)
地球仪() 现在 回报 档名 in 拼音 秩序
来自的文件名列表 地球仪() (或 <...>)现在默认按字母顺序排序为
csh 兼容(这是以前在大多数 Unix 平台中发生的情况)。 (bsd_glob() 不
仍然对平台进行本机排序,ASCII 或 EBCDIC,除非指定了 GLOB_ALPHASORT。)[561]
弃用
· bless(REF, REF) 的语义不清楚,直到有人证明它使一些
意义,这是被禁止的。
· 过时的 chat2 库,本不应该被允许逃脱
实验室已经退役。
· 使用 chdir("") 或 chdir(undef) 而不是显式 目录目录() 是值得怀疑的。 失败
(想想 chdir(一些函数()) 可能会导致意外 目录目录() 到主目录,
因此,此行为已被弃用。
· 内置的 倾倒() 函数可能已经失去了它的大部分用处。 核心-
转储功能将在未来作为显式调用继续可用
“CORE::dump()”,但将来会发布不合格的“dump()”调用的行为
可能会改变。
· eg/ 目录中非常脏的示例已被删除。 新的建议
欢迎使用闪亮的示例,但主要问题是需要记录示例,
测试和(最重要的)维护。
· (虚假的)转义序列 \8 和 \9 现在给出一个可选的警告(“无法识别
转义通过”)。没有必要 \-escape 任何“\w”字符。
· *glob{FILEHANDLE} 已弃用,请改用 *glob{IO}。
·“包”; 语法(没有参数的“包”)已被弃用。 它的
语义从来没有那么清晰,它的实现更不清晰。 如果你用过
该功能禁止所有但完全限定的变量,“使用严格;” 反而。
· 未实现的 POSIX 正则表达式特性 [[.cc.]] 和 [[=c=]] 仍然被识别,但
现在会导致致命错误。 默认情况下忽略它们的先前行为和
如果要求发出警告是不可接受的,因为它在某种程度上错误地承诺
可以使用功能。
· 在未来的版本中,不支持 PerlIO 的 XS 模块可能会完全不受支持。
由于 PerlIO 在源代码级别是 stdio 的直接替代品,因此
应该不会有那么大的变化。
· 以前版本的 perl 和 Camel III 某些部分的一些阅读暗示
":raw" "discipline" 是 ":crlf" 的倒数。 关闭“clrfness”是不行的
足够长的时间使流真正二进制。 所以 PerlIO ":raw" 层(或
“纪律”,使用骆驼书的旧术语)现在正式定义为
等同于 binmode(FH) - 这又被定义为做任何事情
必须按原样传递每个字节而无需任何转换。 特别是binmode(FH)
- 因此 ":raw" - 现在将关闭 CRLF 和 UTF-8 翻译并删除
其他层(例如:编码()) 这将修改字节流。
· 当前用户可见的伪哈希实现(第一个的奇怪使用)
数组元素)从 Perl 5.8.0 开始被弃用,并将在 Perl 中移除
5.10.0,该功能的实现方式将有所不同。 不仅是当前
接口相当丑陋,但当前的实现减慢了普通数组和哈希
使用相当明显。 “字段”pragma 接口将保持可用。 这
受限 哈希 interface 有望成为替换接口(请参阅
哈希::实用程序)。 如果您现有的程序依赖于底层实现,
考虑使用 CPAN 中的 Class::PseudoHash。
· 语法“@a->[...]”和“%h->{...}”现在已被弃用。
· 经过多年的尝试,suidperl 被认为过于复杂而无法考虑
真正安全。 suidperl 功能可能会在未来的版本中删除。
· 5.005 线程模型(模块“Thread”)已弃用,预计将在
珀尔 5.10。 多线程代码应该迁移到新的 ithreads 模型(参见
线程、线程::共享和 perlthrtut)。
· 字符串比较运算符(EQ、NE、LT、
LE、GE、GT)现在已被删除。
· tr///C 和 tr///U 特性已被移除,不会返回; 界面
是一个错误。 对于那个很抱歉。 有关类似的功能,请参阅 pack('U0', ...) 和
包('C0',...)。 [561]
· 早期的 Perls 将“sub foo (@bar)”视为等同于“sub foo (@)”。 原型
现在可以在编译时更好地检查无效语法。 一个可选的警告是
生成(“原型中的非法字符...”)但这可能会升级为致命的
未来版本中的错误。
· “exec LIST”和“system LIST”操作现在对受污染的数据和
在将来的某些版本中,它们将产生致命错误。
· 本地化绑定数组和散列时的现有行为是错误的,将是
在未来的版本中更改,所以不要依赖现有的行为。 见“本地化
绑定数组和哈希被破坏”。
核心 增强
统一 大修
一般来说,Unicode 现在应该比 Perl 5.6.0(甚至 5.6.1)更有用。
Unicode 可以用在哈希键中,Unicode 在正则表达式中应该可以使用了,Unicode
在 tr/// 现在应该可以工作,I/O 中的 Unicode 现在应该可以工作。 见 perluniintro
介绍和 perlunicode 的详细信息。
· Perl 附带的Unicode 字符数据库已升级到Unicode 3.2.0。
欲了解更多信息,请参阅 http://www.unicode.org/ . [561+](5.6.1 有 UCD 3.0.1。)
· 对于有兴趣增强 Perl 的 Unicode 功能的开发人员:几乎所有的 UCD
文件包含在 Perl 发行版中 库/单核 子目录。 这
出于空间考虑,最显着的遗漏是 Unihan 数据库。
· 添加了属性\p{Blank} 和\p{SpacePerl}。 “空白”就像C
空白(),也就是说,它只包含“水平空白”(空格字符是,
换行符不是),而“SpacePerl”是“\s”(\p{Space}
不是,因为这包括垂直制表符,而 "\s" 不包括。)
有关更多信息,请参阅本文档前面的“新 Unicode 属性”
Unicode 属性的变化。
佩里奥 is 现在 这款 默认
· IO 现在默认通过 PerlIO 而不是系统的“stdio”完成。 PerlIO 允许
“层”被“推”到文件句柄上以改变句柄的行为。 图层
可以在打开时通过 3-arg 形式的 open 指定:
打开($fh,'>:crlf :utf8', $path) || ...
或通过扩展的“binmode”在已经打开的句柄上:
binmode($fh,':encoding(iso-8859-7)');
内置层有:unix(低级读/写)、stdio(如之前的 Perls)、
perlio(以可移植的方式重新实现 stdio 缓冲)、crlf(是否执行 CRLF
<=> "\n" 在 Win32 上的翻译,但在任何平台上都可用)。 mmap 层可能是
如果平台支持,则可用(主要是 Unixes)。
默认情况下要应用的层可以通过“open”编译指示指定。
有关 PerlIO 对您的影响,请参阅“安装和配置改进”
架构名称。
· 如果您的平台支持 叉子(),您可以对管道使用“打开”的列表形式。 为了
例:
打开 KID_PS, "-|", "ps", "aux" 或者死 $!;
分叉 ps(1) 命令(不产生 shell,因为有超过三个
参数 打开()),并通过“KID_PS”文件句柄读取其标准输出。 看
佩利普
· 文件句柄可以被标记为接受 Perl 的 Unicode 内部编码(UTF-8 或
UTF-EBCDIC 取决于平台)由伪层 ":utf8" :
open($fh,">:utf8","Uni.txt");
EBCDIC 用户注意:伪层“:utf8”被错误地命名为你,因为
您将获得的不是 UTF-8,而是 UTF-EBCDIC。 见 perlunicode,
utf8,和 http://www.unicode.org/unicode/reports/tr16/ 想要查询更多的信息。 在
未来版本此命名可能会更改。 有关更多信息,请参阅 perluniintro
UTF-8。
· 如果你的环境变量(LC_ALL、LC_CTYPE、LANG)看起来像你想使用 UTF-8
(任何与“/utf-?8/i”匹配的变量),您的 STDIN、STDOUT、STDERR 句柄和
默认开放层(见开放)被标记为UTF-8。 (此功能与其他新功能一样
结合了 Unicode 和 I/O 的功能,只有在您使用 PerlIO 时才有效,但那是
默认值。)
请注意,在此之后 Perl 确实假设一切都是 UTF-8:例如,如果
某些输入句柄不是,Perl 可能很快就会抱怨输入数据
像这样“格式错误的 UTF-8 ...”,因为任何旧的八位数据都不是合法的 UTF-8。
代码作者注意事项:如果您想让您的用户使用 UTF-8 作为他们的默认值
编码但在您的代码中仍然有 XNUMX 位 I/O 流(例如图像或 zip
文件),你需要明确 打开() or 二进制模式() 用 ":bytes" (见 "open" in
perlfunc 和 perlfunc 中的“binmode”),或者你可以只使用“binmode(FH)”(适合
5.8.0 之前的向后兼容性)。
· 文件句柄可以将字符编码从/到 Perl 的内部 Unicode 格式转换
通过“读/写:编码()“ 层。
· 文件句柄可以通过以下方式打开到 Perl 标量中保存的“内存中”文件:
open($fh,'>', \$variable) || ...
· 匿名临时文件可用,无需“使用 FileHandle”或其他
模块通过
open($fh,"+>", undef) || ...
那是一个字面 undef,而不是一个未定义的值。
线程
新的解释器线程(简称“ithreads”)实现多线程,通过
Arthur Bergman,替换了旧的“5.005 线程”实现。 在 ithreads 模型中
线程之间的任何数据共享都必须是显式的,这与数据共享的模型相反
共享是隐含的。 请参阅线程和线程::共享和 perlthrtut。
作为 ithreads 实现的一部分,Perl 还将使用任何必要的和可检测的
可重入的 libc 接口。
受限 哈希
受限散列仅限于特定的一组键,该组之外的键不能被
添加。 还可以限制单个密钥,以便不能删除密钥和
值不能改变。 不涉及新语法:Hash::Util 模块是
界面。
安全 信号
Perl 曾经很脆弱,因为在不合时宜的时刻到达的信号可能会损坏
Perl 的内部状态。 现在 Perl 推迟处理信号直到它是安全的(在
操作码)。
这种变化可能会产生令人惊讶的副作用,因为信号不再中断 Perl
即刻。 Perl 现在将首先完成它正在做的任何事情,就像完成一个内部的
操作(如 种类()) 或外部操作(如 I/O 操作),然后才
查看任何到达的信号(以及在开始下一个操作之前)。 不再腐败
内部状态,因为当前操作总是先完成,但信号可能
花更多的时间来倾听。 请注意,从潜在的阻塞操作中解脱出来
不过应该还是可以的。
理解 of 数值
总的来说,在 Perl 对数字的理解方面已经发生了很多修正,
整数和浮点数。 由于在许多系统中标准数字解析
像 "strtoul()" 和 "atof()" 这样的函数似乎有 bug,Perl 试图解决它们
缺陷。 这有望产生更准确的数字。
Perl 现在尝试在内部使用整数值进行数字转换和基本的
算术 (+ - * /) 如果参数是整数,并尝试保留结果
内部存储为整数。 这种变化通常会导致速度稍快,但总是更少
有损算术。 (以前 Perl 在其数学中总是更喜欢浮点数。)
阵列 现在 时刻 插值 成 双引号 字符串 [561]
在双引号字符串中,现在无论如何都会插入数组。 之前的行为
perl 5 的版本是,如果数组已被插入,则数组将插入到字符串中
在编译字符串之前提到过,否则 Perl 会引发致命的编译 -
时间错误。 在 5.000 到 5.003 版本中,错误是
文字@example 现在需要反斜杠
在 5.004_01 到 5.6.0 版本中,错误是
在字符串中,@example 现在必须写为 \@example
这里的想法是让人们养成写“fred\@example.com”的习惯。
想要一个字面的“@”符号,就像他们总是写“给我回我的\$5”一样
他们想要一个字面意思的“$”符号。
从 5.6.1 开始,当 Perl 现在看到双引号字符串中的“@”符号时,它 时刻
尝试插入数组,无论该数组是否已被使用或
已经声明了。 致命错误已降级为可选警告:
字符串中@example 的可能意外插值
这警告你“[电子邮件保护]" 将变成 "fred.com" 如果你不这样做
反斜杠“@”。 看 http://perl.plover.com/at-error.html 有关更多详细信息
历史在这里。
其他 更改
· AUTOLOAD 现在是 lvalueable,这意味着您可以将 :lvalue 属性添加到 AUTOLOAD
子程序,您可以分配给 AUTOLOAD 返回值。
· $Config{byteorder}(以及 config.h 中对应的 BYTEORDER)以前是错误的
在平台中,如果 sizeof(long) 为 4,但 sizeof(IV) 为 8。字节顺序仅为
sizeof(long) 字节长(1234 或 4321),但现在正确的是 sizeof(IV) 字节长,
(12345678 或 87654321)。 (此问题不影响 Windows 平台。)
此外, $Config{byteorder} 现在是动态计算的——这对于“fat
二进制文件”,其中可执行映像包含多个二进制文件的二进制文件
平台,并在交叉编译时。
· "perl -d:Module=arg,arg,arg" 现在可以工作了(以前一个不能传入多个
论据。)
· “do”后跟一个裸字现在确保这个裸字不是关键字(以避免
“do q(foo.pl)”试图调用名为“q”的子程序的错误)。 这意味着对于
例如,您必须编写“do &format()”而不是“do format()”。
· 内置的 倾倒() 现在给出一个可选的警告“dump() 更好地写成
CORE::dump()",这意味着默认情况下 "dump(...)" 被解析为内置 倾倒()
它转储核心并中止,而不是(可能)用户定义的“子转储”。 调用
后者,将调用限定为“&dump(...)”。 (整体 倾倒() 特征是要考虑的
已弃用,并可能在未来版本中删除/更改。)
· 咀嚼() 和 劈() 现在是可覆盖的。 但是请注意,它们的原型(如给定的
by "prototype("CORE::chomp")" 是未定义的,因为它不能被表达并且
因此,人们无法真正编写替换来覆盖这些内置函数。
· 即使您在 BEGIN 块中退出/死亡,现在也会运行 END 块。 在内部,
END 块的执行现在由 PL_exit_flags & PERL_EXIT_DESTRUCT_END 控制。
这为 Perl 嵌入器启用了新行为。 这将在 5.10 中默认。 看
困惑。
· 格式现在支持用零填充的十进制字段。
· 虽然“你不应该那样做”,但编写依赖于 Perl 的代码是可能的
散列键顺序(Data::Dumper 这样做)。 新算法“一次一个”产生
不同的散列键顺序。 更多细节在“性能增强”中。
· lstat(FILEHANDLE) 现在给出警告,因为操作没有意义。 在未来
释放这可能会成为一个致命的错误。
· 在某些情况下产生的虚假语法错误,当 地球仪() 导致 File::Glob
首次加载,已修复。 [561]
· 左值子程序现在可以在列表上下文中返回“undef”。 然而,左值
子程序功能仍处于试验阶段。 [561+]
· 已恢复丢失的警告“无法声明...在我的取消引用”(Perl 拥有它)
更早,但它在以后的版本中丢失了。)
· 引入了一个新的特殊正则表达式变量:$^N,其中包含
最近关闭的组(子匹配)。
·“无模块”; 即使 Module 没有 取消导入()
方法。 这类似于“使用”与“导入”的行为。 [561]
· 如果任一操作数为 NaN,则数值比较运算符返回“undef”。
以前未指定该行为。
· “我们的”现在可以有一个实验性的可选属性“唯一的”,它会影响全局
变量在多个解释器之间共享,请参阅 perlfunc 中的“我们的”。
· 现在可以覆盖以下内置函数: 每个(), 键(), 流行音乐(), 推(),
转移(), 拼接(), 取消移位()。 [561]
· “pack() / unpack()”现在可以用“()”将模板字母分组然后应用
组上的重复/计数修饰符。
· "pack() / unpack()" 现在可以处理 Perl 内部数字类型:IVs、UVs、NVs--
如果平台支持,还有长双打。 模板字母是“j”,
“J”、“F”和“D”。
· "pack('U0a*', ...)" 现在可用于强制字符串为 UTF-8。
· 我的 __PACKAGE__ $obj 现在可以工作了。 [561]
· POSIX::睡眠() 现在返回的数量 睡不着 秒(如 POSIX 标准所说),
相对于 核心::睡眠() 它返回睡眠秒数。
· 打印输出() 和 冲刺() 现在支持使用 "%\d+\$" 和
"*\d+\$" 语法。 例如
printf "%2\$s %1\$s\n", "foo", "bar";
将打印“bar foo\n”。 此功能有助于编写国际化软件,以及
通常,当参数的顺序可以变化时。
· (\&) 原型现在可以正常工作。 [561]
·prototype(\[$@%&]) 现在可用于隐式创建引用(对于
例如,如果你想模仿 领带() 界面)。
· 新的命令行选项“-t”可用。 是“-T”的弟弟:
不是死于污点违规,而是给出词汇警告。 本篇 is 仅由 意思
as a 临时 调试 援助 而 保障 此 码 of 旧 遗产 领域广泛应用,提供了卓越的解决方案。 本篇
is 而不去 a 替代 -T
· 在其他污点消息中,现在也考虑了“exec LIST”和“system LIST”
有风险(想想“exec @ARGV”:它可以用任何参数启动任何程序),现在
所述形式在词法警告下引起警告。 你应该仔细清洗
论据以保证其有效性。 在 Perl 的未来版本中,表单将
成为致命的错误,所以考虑现在开始洗钱。
· 现在需要绑定哈希接口具有 EXISTS 和 DELETE 方法(或者
拥有或继承)。
· 如果 tr/// 只是计算字符数,它不会尝试修改其目标。
· 解开() 现在将调用 解开() 如果存在则钩住。 有关详细信息,请参阅 perltie。 [561]
· perlfunc 中的“utime”现在支持“utime undef、undef、@files”来改变文件
时间戳到当前时间。
· 放宽了允许在数字常量中使用下划线(下划线)的规则
并简化:现在您可以简单地使用下划线 之间 数字.
· 而不是依赖 C 的 argv[0](可能不包含完整路径名),其中
现在可能通过询问操作系统来设置 $^X。 (例如通过阅读 /proc/自我/exe
在 Linux 上, /proc/curproc/文件 在 FreeBSD 上)
· 新变量“${^TAINT}”指示是否启用污点模式。
· 您现在可以覆盖 阅读线() 内置,这也覆盖
尖括号运算符。
· 命令行选项 -s 和 -F 现在可以在 shebang (#!) 行中识别。
· 使用“/c”匹配修饰符而不伴随“/g”修饰符会引发新的
警告:“没有 /g,使用 /c 修饰符毫无意义”。
在替换中使用“/c”,即使使用“/g”,也会引出“使用 /c 修饰符是
在 s/// 中毫无意义。
将“/g”与“split”一起使用会导致“在 split 中使用 /g 修饰符毫无意义”。
· 添加了对“CLONE”特殊子程序的支持。 使用 ithreads,当一个新的
创建线程,克隆所有 Perl 数据,但不能克隆非 Perl 数据
自动地。 在“克隆”中,您可以做任何您需要做的事情,例如处理
如有必要,克隆非 Perl 数据。 “CLONE”将被执行一次
定义或继承了它的包。 它将在新的上下文中调用
线程,因此所有修改都在新区域中进行。
见 perlmod
模块 和 实用语
全新 模块 和 实用语
· "Attribute::Handlers", 最初由 Damian Conway 开发,现在由 Arthur 维护
Bergman,允许类定义属性处理程序。
包裹我的包裹;
使用属性::处理程序;
sub Wolf :ATTR(SCALAR) { 打印“嚎叫!\n”}
# 稍后,在一些使用或继承自 MyPack 的包中...
我的 MyPack $Fluffy : Wolf; # 属性处理程序 Wolf 将被调用
变量和例程都可以有属性处理程序。 处理程序可以特定于
类型(SCALAR、ARRAY、HASH 或 CODE),或特定于确切的编译阶段
(开始、检查、初始化或结束)。 请参阅属性::处理程序。
· "B::Concise", by Stephen McCamant, 是一个新的编译器后端,用于遍历 Perl
语法树,打印关于 ops 的简明信息。 输出是高度可定制的。 看
B::简洁。 [561+]
· 新的 bignum、bigint 和 bigrat pragma,由 Tels 实现,实现透明 bignum
支持(使用 Math::BigInt、Math::BigFloat 和 Math::BigRat 后端)。
· "Class::ISA",由 Sean Burke 编写,是一个报告类的搜索路径的模块
ISA 树。 请参阅类::ISA。
· “Cwd”现在具有分裂的个性:如果可能,使用 XS 扩展名,(这将
希望更快,更安全,更健壮)但如果不可能,熟悉的
使用 Perl 实现。
· “Devel::PPPort”,最初由 Kenneth Albanowski 编写,现在由 Paul Marquess 维护,
已添加。 它主要被“h2xs”用来增强XS模块的可移植性
在不同版本的 Perl 之间。 请参阅开发::PPPort。
·“摘要”,用于计算摘要(校验和)的前端模块,来自 Gisle Aas,具有
已添加。 见文摘。
· "Digest::MD5" 用于计算 RFC 5 中定义的 MD1321 摘要(校验和),来自
已添加 Gisle Aas。 请参阅摘要::MD5。
使用摘要::MD5 'md5_hex';
$digest = md5_hex("渴骆驼");
print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1
注意:故意不包含“MD5”向后兼容模块,因为它
不鼓励进一步使用。
另见 PerlIO::via::QuotedPrint。
· “Encode”,最初由 Nick Ing-Simmons 编写,现在由 Dan Kogai 维护,提供了一个
在不同字符编码之间进行转换的机制。 支持 Unicode,
ISO-8859-1 和 ASCII 被编译到模块中。 其他几种编码(如
ISO-8859 的其余部分,CP*/Win*,Mac,KOI8-R,三种变体 EBCDIC,中文,
包括日语和韩语编码)并可在运行时加载。 (对于空间
考虑到,最大的中文编码已经分离成自己的CPAN
模块,Encode::HanExtra,如果可用,Encode 将使用)。 请参阅编码。
Encode 模块支持的任何编码也可用于“:编码()“ 层
如果使用 PerlIO。
· "Hash::Util" 是新的接口 受限 哈希 特征。 (实施者
Jeffrey Friedl、Nick Ing-Simmons 和 Michael Schwern。)参见 Hash::Util。
· "I18N::Langinfo" 可用于查询语言环境信息。 请参阅 I18N::Langinfo。
· "I18N::LangTags",作者 Sean Burke,具有处理 RFC3066 风格语言的功能
标签。 请参阅 I18N::LangTags。
· “ExtUtils::Constant”,由 Nicholas Clark 编写,是扩展编写者的新工具
生成 XS 代码以导入 C 标头常量。 请参阅 ExtUtils::Constant。
· “Filter::Simple”,由 Damian Conway 编写,是 Filter::Util::Call 的一个易于使用的前端。
请参阅过滤器::简单。
# 在 MyFilter.pm 中:
包我的过滤器;
使用过滤器::简单子{
while (my ($from, $to) = 拼接 @_, 0, 2) {
s/$从/$到/g;
}
};
1;
# 在用户的代码中:
使用 MyFilter qr/red/ => 'green';
打印“红色\n”; # 这段代码被过滤了,会打印“green\n”
打印“无聊\n”; # 此代码被过滤,将打印“bogreen\n”
没有我的过滤器;
打印“红色\n”; # 这段代码没有过滤,会打印“red\n”
· Tim Jenness 的“File::Temp”允许在
一种简单、便携且安全的方式。 请参阅文件::临时文件。 [561+]
· "Filter::Util::Call", by Paul Marquess, 为你提供编写框架
资源 过滤器 在 Perl 中。 对于大多数用途,前端 Filter::Simple 是
首选。 请参阅过滤器::Util::Call。
· “if”,由 Ilya Zakharevich 编写,是一种用于有条件地包含模块的新 pragma。
· libnet,由 Graham Barr 编写,是与网络相关的 perl5 模块的集合
编程。 请参阅 Net::FTP、Net::NNTP、Net::Ping(不是 libnet 的一部分,但相关),
Net::POP3、Net::SMTP 和 Net::Time。
Perl 安装使 libnet 未配置; 利用 libnetcfg 配置它。
· Graham Barr 所著的“List::Util”是一组通用的实用列表子程序,例如
as 总和(), 分钟(), 第一()及 随机播放. 请参阅列表::实用程序。
· “Locale::Constants”、“Locale::Country”、“Locale::Currency”、“Locale::Language”和
已添加由 Neil Bowers 编写的 Locale::Script。 他们提供各种代码
语言环境标准,例如“fr”代表法国,“usd”代表美元,“ja”代表日本。
使用 Locale::Country;
$country = code2country('jp'); # $country 得到“日本”
$code = country2code('挪威'); # $code 得到 'no'
请参阅 Locale::Constants、Locale::Country、Locale::Currency 和 Locale::Language。
· Sean Burke 的“Locale::Maketext”是一个本地化框架。 见 Locale::Maketext,
和 Locale::Maketext::TPJ13。 后者是一篇关于软件本地化的文章,
最初发表在 The Perl Journal #13 上,并在此处以 kind 重新发布
允许。
· "Math::BigRat" 用于大有理数,伴随 Math::BigInt 和 Math::BigFloat,
从电话。 参见数学::BigRat。
· “Memoize”可以通过以空间换时间来使您的功能更快,来自 Mark-Jason
主宰。 请参阅记忆。
· Gisle Aas 的“MIME::Base64”允许您按照 RFC 中的定义以 base64 编码数据
2045 - MIME (多用途 网络 邮箱: 扩展).
使用 MIME::Base64;
$encoded = encode_base64('阿拉丁:芝麻开门');
$已解码=decode_base64($已编码);
打印 $encoded, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
请参阅 MIME::Base64。
· Gisle Aas 的“MIME::QuotedPrint”允许您以引用打印的格式对数据进行编码
编码,如 RFC 2045 中所定义 - MIME (多用途 网络 邮箱: 扩展).
使用 MIME::QuotedPrint;
$encoded = encode_qp("\xDE\xAD\xBE\xEF");
$已解码=decode_qp($已编码);
打印 $encoded, "\n"; # "=DE=AD=BE=EF\n"
打印 $decoded, "\n"; # "\xDE\xAD\xBE\xEF\n"
另见 PerlIO::via::QuotedPrint。
· “NEXT”,由 Damian Conway 编写,是一个用于方法重新调度的伪类。 见下一个。
· “open”是一个新的 pragma,用于设置默认 I/O 层 打开().
· “PerlIO::scalar”,由 Nick Ing-Simmons 提供,为“in
内存” Perl 标量,如上所述。它也用作可加载的示例
PerlIO 层。 其他未来的可能性包括 PerlIO::Array 和 PerlIO::Code。 看
PerlIO::标量。
· "PerlIO::via", by Nick Ing-Simmons,充当 PerlIO 层并包裹 PerlIO 层
类提供的功能(通常在 Perl 代码中实现)。
· "PerlIO::via::QuotedPrint",作者 Elizabeth Mattijsen,是 "PerlIO::via" 的一个例子
类:
使用 PerlIO::via::QuotedPrint;
open($fh,">:via(QuotedPrint)",$path);
这将自动将所有输出转换为 $fh 到 Quoted-Printable。 看
PerlIO::via 和 PerlIO::via::QuotedPrint。
· 添加了 Russ Allbery 的“Pod::ParseLink”,用于将 Pod 中的 L<> 链接解析为
在新的 perlpodspec 中描述。
· 添加了 Joe Smith 的“Pod::Text::Overstrike”。 它将 POD 数据转换为
格式化重划文本。 见 Pod::Text::Overstrike。 [561+]
· "Scalar::Util" 是通用标量子程序的选择,例如
祝福(), 引用类型()及 污染(). 请参阅标量::实用程序。
· “排序”是一种控制行为的新语用 种类().
· “Storable”通过允许存储和
以快速紧凑的二进制格式从文件中检索 Perl 数据。 因为
实际上,Storable 对 Perl 数据结构进行序列化,您还可以使用它
克隆深层的分层数据结构。 Storable 最初由 Raphael 创建
Manfredi,但它现在由 Abhijit Menon-Sen 维护。 可存储性得到增强
了解两个新的散列特性,Unicode 键和受限散列。 看
可储存。
· 添加了 Damian Conway 的“Switch”。 只是说
使用开关;
你有 Perl 中的“switch”和“case”。
使用开关;
开关($val){
案例 1 { 打印“数字 1”}
案例“a”{打印“字符串a”}
case [1..10,42] { 打印“列表中的数字”}
case (@array) { 打印“列表中的数字”}
case /\w+/ { 打印“模式”}
case qr/\w+/ { 打印“模式”}
case (%hash) { 打印“哈希中的条目”}
case (\%hash) { 打印“哈希中的条目”}
case (\&sub) { 打印“参数到子程序”}
else { 打印“前一个案例不正确”}
}
请参阅开关。
· Michael Schwern 的“Test::More”是另一个编写测试脚本的框架,
比 Test::Simple 更广泛。 请参阅测试::更多。
· Michael Schwern 的“Test::Simple”具有编写测试的基本实用程序。 看
测试::简单。
· 添加了 Damian Conway 的“Text::Balanced”,用于提取分隔文本
来自字符串的序列。
使用 Text::Balanced 'extract_delimited';
($a, $b) = extract_delimited("'从不说',他从不说", "'", '');
$a 将是“'永不言败'”,$b 将是',他从未说过'。
此外 提取分隔(),也有 提取括号(),
extract_quotelike(), 提取代码块(), 提取变量(), 提取标记(),
extract_multiple(), gen_delimited_pat()及 gen_extract_tagged(). 有了这些,你
可以实现相当先进的解析算法。 请参阅文本::平衡。
· “线程”,由 Arthur Bergman 编写,是解释器线程的接口。 口译员
线程 (ithreads) 是 Perl 5.6 中引入的新线程模型,但仅可用
作为扩展编写者的内部接口(以及用于“fork()”的 Win32 Perl
仿真)。 请参阅线程、线程::共享和 perlthrtut。
· “threads::shared”,作者 Arthur Bergman,允许解释器线程共享数据。
请参阅线程::共享。
· Mark-Jason Dominus 的“Tie::File”将 Perl 数组与文件的行相关联。
见领带::文件。
· Ilya Zakharevich 的“Tie::Memoize”提供按需加载的哈希值。 看
领带::记住。
· Edward Avis 的“Tie::RefHash::Nestable”允许存储散列引用(不像
标准 Tie::RefHash) 该模块包含在 Tie::RefHash 中。 看
领带::RefHash。
· Douglas E. Wegscheid 的“Time::HiRes”提供高分辨率计时(ualarm、
usleep 和 gettimeofday)。 请参阅时间::高分辨率。
· "Unicode::UCD" 提供了一个到 Unicode 字符数据库的查询接口。 看
Unicode::UCD。
·“Unicode::Collate”,由 SADAHIRO Tomoyuki 编写,实现了 UCA(Unicode Collation
Algorithm) 用于对 Unicode 字符串进行排序。 请参阅 Unicode::Collate。
·“Unicode::Normalize”,由 SADAHIRO Tomoyuki 编写,实现了各种 Unicode
规范化形式。 请参阅 Unicode::Normalize。
· Tim Jenness 的“XS::APItest”是一个测试扩展,用于练习 XS API。 目前
仅测试“printf()”:如何从 XS 输出各种基本数据类型。
· "XS::Typemap",由 Tim Jenness 编写,是一个测试扩展,用于练习 XS 类型映射。
没有安装任何东西,但代码值得扩展编写者研究。
更新 和 优化 模块 和 实用语
· 以下独立支持的模块已更新至最新版本
来自 CPAN:CGI、CPAN、DB_File、File::Spec、File::Temp、Getopt::Long、Math::BigFloat、
Math::BigInt,podlators 包(Pod::Man,Pod::Text),Pod::LaTeX [561+],
Pod::Parser、Storable、Term::ANSIColor、Test、Text-Tabs+Wrap。
· 属性::reftype() 现在适用于绑定参数。
· 现在可以使用“no AutoLoader;”禁用 AutoLoader。
· B::Deparse 已被 Robin Houston 显着增强。 现在可以解析了
几乎所有的标准测试套件(这样测试仍然成功)。 有一个
制作目标“test.deparse”来尝试这个。
· Carp 现在有更好的接口文档,@CARP_NOT 接口已经
添加以对独立于@ISA 的错误报告位置进行可选控制,通过
本·提利。
· Class::Struct 现在可以在编译时定义类。
· Class::Struct 现在在调用访问器时分配数组/散列元素
数组/哈希元素作为 太阳 论据。
· 返回值 Cwd::fastcwd() 现在被污染了。
· Data::Dumper 现在可以选择对哈希进行排序。
· Data::Dumper 现在可以选择使用 B::Deparse 转储代码引用。
· DB_File 现在支持较新的 Berkeley DB 版本,以及其他改进。
· Devel::Peek 现在有一个 Perl 内存统计接口(只有当
您正在使用 perl 的 malloc,并且如果您使用调试进行编译)。
· 现在可以使用英文模块,而不会因为说声名狼藉的表现而受到打击
使用英文'-no_match_vars';
(当然,假设您不需要麻烦的变量“$`”、$& 或
"$'".) 此外,还引入了@LAST_MATCH_START 和@LAST_MATCH_END 英文别名
“@-”和“@+”。
· ExtUtils::MakeMaker 得到了显着的清理和修复。 加强版
也被反向移植到早期版本的 Perl 并提交给 CPAN,以便
早期版本可以享受修复。
· 论据 写Makefile() 现在更多地检查 Makefile.PL 中的完整性
比以前仔细。 这可能会在安装模块时导致新的警告。
有关更多详细信息,请参阅 ExtUtils::MakeMaker。
· ExtUtils::MakeMaker 现在在内部使用 File::Spec,这有望带来更好的效果
可移植性。
· Fcntl、Socket 和 Sys::Syslog 已被 Nicholas Clark 重写,以使用新的-
样式常量调度部分(参见 ExtUtils::Constant)。 这意味着他们将
更健壮,希望更快。
· 文件::立即查找 目录目录()追逐符号链接时正确。 [561]
· File::Find 现在具有预处理和后处理回调。 它也正确地改变
追逐符号链接时的目录。 回调(顽皮地)以“next”退出;
而不是“返回;” 现在工作。
· File::Find 现在(再次)可重入。 它也变得更加便携。
· File::Find 发出的警告现在属于它们自己的类别。 你可以
使用“使用/无警告‘文件::查找’;”启用/禁用它们。
· 文件::全局::glob() 已重命名为 文件::全局::bsd_glob() 因为名字冲突
与内置 地球仪(). 旧名称仍可用于兼容性,但
已弃用。 [561]
· File::Glob 现在支持“GLOB_LIMIT”常量来限制返回列表的大小
的文件名。
· IPC::Open3 现在允许使用数字文件描述符。
· IO::Socket 现在有一个 标记() 方法,如果套接字已定位,则返回 true
在带外标记处。 该方法也可导出为 袜子标记() 功能。
· 如果服务名称未知,IO::Socket::INET 无法打开指定的端口。
它现在可以按原样正确使用提供的端口号。 [561]
· IO::Socket::INET 支持 ReusePort 选项(如果您的平台支持)。
Reuse 选项现在有一个别名 ReuseAddr。 为清楚起见,您可能更喜欢
重用地址
· IO::Socket::INET 现在支持“LocalPort”的值为零(通常意味着
操作系统将弥补一个。)
· 'use lib' 现在与@INC 的工作方式相同。 现在删除“没有库”的目录
作品。
· Math::BigFloat 和 Math::BigInt 已被 Tels 完全重写。 他们现在
速度更快,并且它们支持各种 bignum 库,例如 GMP 和 PARI
他们的后端。
· Math::Complex 处理 inf、NaN 等,更好。
· Net::Ping 已被 Rob Brown 显着增强:现在支持多宿主,
Win32 功能更好,现在有时间测量功能(可选
高分辨率使用 Time::HiRes),现在有“外部”协议使用
Net::Ping::External 模块,它运行您的外部 ping 实用程序并解析
输出。 CPAN 中提供了一个 Net::Ping::External 版本。
请注意,在 Perl 下运行时,某些 Net::Ping 测试被禁用
分布,因为不能假设以下一项或多项: 启用回声端口
在本地主机、完整的 Internet 连接或同情防火墙。 您可以设置
在运行 Perl 测试之前将环境变量 PERL_TEST_Net_Ping 设置为“1”(一)
套件以启用所有 Net::Ping 测试。
· POSIX::sigaction() 现在更加灵活和强大。 您现在可以安装 coderef
处理程序、'DEFAULT' 和 'IGNORE' 处理程序,安装新处理程序不是原子性的。
· 在 Safe 中,%INC 现在位于 Safe 隔间中,以便使用/需要工作。
· 在 DOSish 平台上的 SDBM_File 中,由于缺乏支持,一些键丢失了
对于带有“孔”的文件。 已添加该问题的解决方法。
· 在 Search::Dict 中,现在可以为正在搜索的行添加一个预处理钩子。
· Shell 模块现在有一个OO 接口。
· 在 Sys::Syslog 中,现在有一个故障转移机制,它将通过替代
连接机制,直到成功记录消息。
· 测试模块得到了显着增强。
· 时间::本地::时间本地() 不再处理小数秒。 理由是
也不行 当地时间()及 时间本地() 和 当地时间() 应该是
互为倒数。
· vars pragma 现在支持声明完全限定的变量。 (一些东西
“our()”不支持,也不会支持。)
· "utf8::" 命名空间(如在编译指示中)提供了各种 Perl 可调用函数来
提供对 Perl 内部 Unicode 表示的低级访问。 眼下
仅由 长度() 已经实施。
公用事业 更改
· Emacs perl 模式(emacs/cperl-mode.el) 已更新至4.31 版。
· emacs/e2ctags.pl 现在要快得多。
· "enc2xs" 是一种工具,人们可以将自己的编码添加到 Encode 模块中。
· "h2ph" 现在支持 C 三字符。
· "h2xs" 现在生成模板自述文件。
· “h2xs”现在使用“Devel::PPPort”来更好地在不同版本的
珀尔。
· "h2xs" 使用了新的 ExtUtils::Constant 模块,它会影响新创建的
定义常量的扩展。 由于新代码更正确(如果您有两个
常量,其中第一个是第二个的前缀,第一个常量 决不要
已定义),损耗较小(它使用整数作为整数常量,而不是旧的
甚至对于整数常量也使用浮点数的代码),并且稍微
更快,您可能需要考虑重新生成扩展代码(新方案
使再生变得容易)。 h2xs 现在也支持 C 三字符。
· 添加了“libnetcfg”来配置libnet。
· “perlbug”现在更加健壮。 它还将错误报告发送到 perl.org,而不是
perl.com。
· “perlcc”已被重写,其用户界面(即命令行)很多
更像是 Unix C 编译器,cc。 (perlbc 工具已被删除。使用
改为“perlcc -B”。) 备注 这 半透明 is 仍然 考虑 非常 试验 和
不支持。 [561]
· "perlivp" 是一个新的安装验证程序实用程序,可随时运行
安装 Perl 后。
· "piconv" 是字符转换实用程序 "iconv" 的实现,
演示新的编码模块。
· “pod2html”现在允许指定缓存目录。
· "pod2html" 现在生成 XHTML 1.0。
· “pod2html”现在可以理解使用不同行尾写的 POD(类似 PC 的 CRLF
与类 Unix 的 LF 与类 MacClassic 的 CR)。
· “s2p”已完全用 Perl 重写。 (它实际上是一个完整的实现
Perl 中的 sed:您可以通过使用“psed”实用程序来使用 sed 功能。)
· “xsubpp”现在可以理解嵌入在 *.xs 文件中的 POD 文档。 [561]
· "xsubpp" 现在支持 OUT 关键字。
全新 文件管理
· perl56delta 详细说明了 5.005 版本和 5.6.0 版本之间的变化。
· perlclib 记录了标准 C 库函数的内部替换。
(仅对扩展编写者和 Perl 核心黑客感兴趣。)[561+]
· perldebtut 是一个 Perl 调试教程。 [561+]
· perlebcdic 包含在 EBCDIC 平台上运行 Perl 的注意事项。 [561+]
· perlintro 是对 Perl 的温和介绍。
· perliol 用层来记录 PerlIO 的内部结构。
· perlmodstyle 是编写模块的风格指南。
· perlnewmod 讲述了编写和提交新模块的过程。 [561+]
· perlpacktut 是一个 盒() 教程。
· perlpod 已被重写,使其更清晰并记录收集到的最佳实践
这些年来。
· perlpodspec 是一种更正式的 pod 格式规范,主要用于
pod 应用程序的编写者,而不是在 pod 中编写的人。
· perlretut 是一个正则表达式教程。 [561+]
· perlrequick 是正则表达式快速入门指南。 是的,比
佩尔雷图特。 [561]
· perltodo 已更新。
· perltootc 已重命名为 perltooc(为了不与 perltoot 在
文件系统仅限于“8.3”名称)。
· perluniintro 介绍了在 Perl 中使用 Unicode。 (perlunicode 更像是一个
详细的参考资料和背景资料)
· perlutil 解释了与 Perl 发行版一起打包的命令行实用程序。
[561 +]
以下特定于平台的文档在安装前可用
自述文件。平台, 并按照 perl 安装后平台:
perlaix perlamiga perlapollo perlbes perlbs2000
perlce perlcygwin perldgux perldos perlepoc perlfreebsd perlhpux
perlhurd perlirix perlmachten perlmacos perlmint perlmpeix
perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris
perltru64 perlut perlvmesa perlvms perlvos perlwin32
这些文档通常详细说明以下一个或多个主题:配置、
在上述平台上构建、测试、安装,有时还使用 Perl。
现在欢迎东亚 Perl 用户使用他们自己的语言:README.jp(日语),
README.ko(韩文)、README.cn(简体中文)和README.tw(繁体中文),
用普通 pod 编写但用 EUC-JP、EUC-KR、EUC-CN 和 Big5 编码。 这些
将被安装为
perljp perlko perlcn perltw
· POSIX-BC 平台的文档称为“BS2000”,以避免混淆
使用 Perl POSIX 模块。
· WinCE平台的文档叫做perlce(源代码中的README.ce
代码工具包),以避免与 32-restricted 上的 perlwin8.3 文档混淆
文件系统。
性能 增强
· 地图() 当它生成的结果列表大于
来源清单。 对常见场景的性能进行了改进。 [561]
· 种类() 也是完全可重入的,因为排序函数本身可以调用
种类(). 这在以前的版本中不能可靠地工作。 [561]
· 种类() 已更改为主要在内部使用归并排序,而不是
较早的快速排序。 对于非常小的列表,这可能会导致排序稍慢
次,但通常加速至少应为 20%。 额外的奖金是
最坏情况下的行为 种类() 现在更好了(用计算机科学术语来说它现在
运行时间为 O(N log N),而不是快速排序的 Theta(N**2) 最坏情况运行时间
行为),并且 种类() 现在是稳定的(意味着具有相同键的元素
将保持排序之前的排序)。 请参阅“排序”编译指示
信息。
更详细的故事:假设您想为自己提供一小块 Pi。
@digits = (3,1,4,1,5,9);
正如预期的那样,数字的数字排序将产生 (1,1,3,4,5,9)。 哪一个来
第一个很难知道,因为一个 1 看起来很像其他任何一个。 你可以认为
这完全是微不足道的,或者说有点深刻。 但是,如果您只想对
偶数位在奇数位前,那么会怎样
排序 { ($a % 2) <=> ($b % 2) } @digits;
屈服? 唯一的偶数 4 将首先出现。 但是奇数呢?
所有比较相等? 使用用于实现 Perl 5.6 的快速排序算法和
早些时候,关系的顺序由排序决定。 所以,随着你添加的越来越多
Pi 的位数,排序后的偶数和奇数出现的顺序会发生变化。
而且,对于足够大的 Pi 切片,Perl 5.8 中的快速排序算法不会
即使使用相同的输入重新调用,也返回相同的结果。 的理由
这取决于快速排序的最坏情况行为。 如果你跑
sort { $a <=> $b } ( 1 .. $N , 1 .. $N );
(如果您想使用 sort 合并两个已排序的数组,您可能会进行近似计算),
加倍 $N 不仅会使快速排序时间加倍 四元组 它。 快速排序有一个
最坏情况下的运行时间可以像 N**2 一样增长,即所谓的 二次的 行为,它可以
发生在正常使用中很可能出现的模式上。 你不会注意到这个小
数组,但你 将 用更大的数组注意它,你可能活得不够长
以在一百万个元素的数组上完成排序。 所以 5.8 快速排序
在排序之前对大型数组进行打乱,作为对二次方的统计防御
行为。 但这意味着如果你对同一个大数组排序两次,关系可能会被打破
以不同的方式。
由于平局顺序的不可预测性,以及二次最坏情况
行为,快速排序是 几乎 完全替换为稳定的归并排序。 稳定
意味着打破联系以保留输入中的原始出现顺序
大批。 所以
排序 { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9);
将产生(4,3,1,1,5,9),保证。 偶数和奇数出现在输出中
以相同的顺序出现在输入中。 Mergesort 有最坏的情况 O(N log N)
行为,可达到的最佳价值。 而且,具有讽刺意味的是,这个归并排序确实
特别好,快速排序是二次的:mergesort sorts (1..$N, 1..$N) in
准时。 但是quicksort在最后一刻被救了出来,因为它比
某些输入和平台上的归并排序。 例如,如果你真的 别 关心
关于偶数和奇数的顺序,quicksort将在O(N)时间内运行; 这是很
擅长对少量不同元素的多次重复进行排序。 这
快速排序分治策略适用于相对较小的平台,
非常快,缓存。 最终,问题被缩减为一个适合
缓存,从这一点上它受益于增加的内存速度。
快速排序是通过实施排序编译指示来控制排序的各个方面而得到拯救的。
这款 稳定 无论算法如何,subpragma 都会强制执行稳定的行为。 这 _快速排序
和 _mergesort subpragma 是选择底层的严厉方式
执行。 前导的“_”提醒这些 subpragma 可能无法生存
超过 5.8。 存在更合适的选择实现的机制,但是
他们不会及时到达以保存快速排序。
· 哈希现在使用 Bob Jenkins“一次一次”哈希密钥算法(
http://burtleburtle.net/bob/hash/doobs.html )。 这个算法相当快
同时产生比旧散列算法更好的值传播
(最初由 Chris Torek,后来由 Ilya Zakharevich 调整)。 哈希值输出
从所有 3 字符可打印 ASCII 密钥的散列算法来看,更接近于
通过 DIEHARD 随机数生成测试。 根据 perlbench,这
更改并没有影响 Perl 的整体速度。
· 取消移位() 现在应该明显更快。
拼装图 和 配置 建设
通用 建设
· INSTALL 现在解释了如何配置 Perl 以使用 64 位整数,即使在
非 64 位平台。
· Policy.sh 策略更改:如果您正在重用 Policy.sh 文件(请参阅安装)并且您使用
配置 -Dprefix=/foo/bar 并在旧策略 $prefix eq $siteprefix 和 $prefix 中
eq $vendorprefix,所有这些现在都将更改为新的前缀,/foo/bar。
(以前只更改了 $prefix。)如果您不喜欢这种新行为,请指定
明确的前缀、站点前缀和供应商前缀。
· Perl 库的新可选位置otherlibdirs 可用。 有可能
例如用于供应商附加组件,而不会干扰 Perl 自己的库目录。
· 在许多平台中,供应商提供的“cc”过于精简,无法构建 Perl
(基本上,'cc' 不支持 ANSI C)。 如果这似乎是这种情况而“抄送”没有
似乎是 GNU C 编译器“gcc”,自动尝试查找和使用
'gcc' 代替。
· gcc 需要密切跟踪操作系统的发布以避免构建问题。 如果
Configure 发现 gcc 是为不同的操作系统版本构建的
运行时,它现在发出清晰可见的警告,表明前方可能存在问题。
· 由于 Perl 5.8 与以前的 Perl 版本不是二进制兼容的,所以不要配置
更长的建议在@INC 中包含 5.005 模块。
· 配置“-S”现在可以以非交互方式运行。 [561]
· 由于过时,已删除对 pdp11 样式内存模型的配置支持。
[561]
· configure.gnu 现在可以处理带有空格的选项。
· installperl 现在将所有内容输出到 STDERR。
· 因为 PerlIO 现在是大多数平台上的默认值,“-perlio”不会被附加到
$Config{archname} (也称为 $^O)了。 相反,如果您明确选择
不使用 perlio(配置命令行选项 -Uuseperlio),你会得到“-stdio”
附加。
· 与架构名称相关的另一个变化是“-64all”(-Duse64bitall,或
仅当您的指针为 64 位宽时才附加“最大 64 位”)。 (准确地说,
use64bitall 被忽略。)
· 在 AFS 安装中,可以将 AFS 的根目录配置为其他位置
默认值 /AFS 通过使用配置参数“-Dafsroot=/some/where/else”。
· APPLLIB_EXP,一个鲜为人知的配置时间定义,已被记录在案。 它
可用于将特定于站点的目录添加到 Perl 的默认搜索路径 (@INC);
有关信息,请参阅安装。
· Perl 时使用的 Berkeley DB 版本(可能还有 DB_File 扩展名)
已构建现在可用作@Config{qw(db_version_major db_version_minor
db_version_patch)} 来自 Perl 和“DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
DB_VERSION_PATCH_CFG”来自 C。
· 为 DB、NDBM 和 ODBM 的兼容模式构建 Berkeley DB3
记录在安装。
· 如果您有 CPAN 访问权限(网络或本地副本,例如 CD-ROM),您可以
在指定要配置的额外模块以使用 Perl 构建和安装期间
-Dextras=... 选项。 有关更多详细信息,请参阅安装。
· 除了 config.over,还有一个新的覆盖文件 config.arch 可用。 这个文件
应该由提示文件编写者用于架构范围的更改(而不是
到 config.over 用于站点范围的更改)。
· 如果你的文件系统支持符号链接,你可以在源代码之外构建 Perl
目录由
mkdir perl/build/目录
cd perl/build/目录
sh /path/to/perl/source/Configure -Dmksymlinks ...
这将在 perl/build/directory 中创建一个指向文件的符号链接树
/path/to/perl/source. 原始文件不受影响。 配置完成后
完成了,你可以说
做所有测试
Perl 将在 perl/build/目录中构建和测试。 [561]
· 对于 Perl 开发人员,几个用于分析和调试的新 make 目标已经
添加; 见 perlhack。
· 使用 教授 分析 Perl 的工具已记录在 perlhack 中。 那里
是一个名为“perl.gprof”的 make 目标,用于生成 gprofiled Perl
可执行文件。
· 如果您有 GCC 3,则有一个名为“perl.gcov”的 make 目标用于创建一个
gcoved Perl 可执行文件,用于覆盖率分析。 参见 perlhack。
· 如果您在 IRIX 或 Tru64 平台上,新的分析/调试选项具有
已添加; 有关 pixie 和 Third degree 的更多信息,请参阅 perlhack。
· 在安装中添加了如何构建最小 Perl 安装的指南。
· Thread 扩展现在根本不在 ithreads 下构建(“配置
-Duseithreads") 因为它无论如何都不起作用(线程扩展需要
配置为“-Duse5005threads”)。
备注 这 此 5.005 线程 旨在 不支持 和 弃用: if 它们在许多情况下都能提供类似的结果。 码 书面
此 旧 线程 应该 迁移 it 至 此 新 线程 模型。
· perl 用于字符串化浮点数的 Gconvert 宏 ($Config{d_Gconvert})
数字现在对使用 sprintf %.*g 规则进行转换更加挑剔。 一些
过去使用 gcvt 的平台现在可能会求助于较慢的 sprintf。
· 通过说使 perl 具有特殊(例如,调试)风味的过时方法
使 LIBPERL=libperld.a
已被删除。 改用 -DDEBUGGING。
全新 Or 优化 平台
有关已知支持 Perl 的平台列表,请参阅 perlport 中的“支持的平台”。
· AIX 动态加载现在应该得到更好的支持。
· AIX 现在应该能更好地使用 gcc、线程和 64 位。 还有长双打
现在在 AIX 中的支持应该会更好。 见珍珠。
· AtheOS( http://www.atheos.cx/ ) 是一个新平台。
· BeOS 已被回收。
· DG/UX 平台现在支持 5.005 风格的线程。 见 perldgux。
· DYNIX/ptx 平台(也称为 dynixptx)在 osvers 4.5.2 或附近得到支持。
· EBCDIC 平台(z/OS(也称为 OS/390)、POSIX-BC 和 VM/ESA)已经
恢复了。 许多测试套件测试仍然失败以及 Unicode 和 EBCDIC 的共存
还没有完全解决,但情况比 Perl 5.6 好得多。 看
perlos390、perlbs2000(用于 POSIX-BC)和 perlvmesa 了解更多信息。 (请注意:
Perl v5.18.0 中删除了对 VM/ESA 的支持。 相关信息在
自述文件)
· 使用 -Duseithreads 或 -Duse5005threads 构建 perl 现在可以在 HP-UX 10.20 下运行
(以前它只能在 10.30 或更高版本下运行)。 您将需要一个线程库
安装包。 请参见 README.hpux。 [561]
· 主流源码包现在支持Mac OS Classic(MacPerl有
当然从 perl 5.004 开始可用,但现在是标准 Perl 的源代码库
和 MacPerl 已经同步)[561]
· Mac OS X(或 Darwin)现在应该能够在 HFS+ 文件系统上构建 Perl。 (这
不区分大小写用于混淆 Perl 构建过程。)
· 现在支持 NCR MP-RAS。 [561]
· 所有 NetBSD 特定的补丁(安装特定的除外)已经被
合并回主要发行版。
· 现在支持来自 Novell 的 NetWare。 请参阅 perlnetware。
· 现在支持 NonStop-UX。 [561]
· 现在支持NEC SUPER-UX。
· 所有 OpenBSD 特定的补丁(安装特定的除外)已经被
合并回主要发行版。
· Perl 已经过 GNU pth 用户级线程包测试(
http://www.gnu.org/software/pth/pth.html )。 Perl 的所有线程测试现在都可以工作,但是
不是没有添加一些 屈服()s 到测试,所以虽然 pth(和其他用户级别
线程实现)可以被认为是与 Perl ithreads“工作”,保持在
请注意底层线程实现可能的不可抢占性。
· 现在使用 Perl 的本地构建方法 (Configure) 支持 Stratus VOS。 这是
在 VOS 上构建 Perl 的推荐方法。 构建 miniperl 的旧方法,
仍然可用。 见 perlvos。 [561+]
· 现在支持 Amdahl UTS Unix 大型机平台。 [561]
· 现在支持 WinCE。 见 perlce。
· z/OS(以前称为 OS/390,以前称为 MVS OE)现在支持动态
加载。 默认情况下不选择此选项,但是,您必须在
Configure 的参数。 [561]
选 问题 修复
许多内存泄漏和未初始化的内存访问已被追捕。 最多
重要的是,匿名订阅者过去常常泄漏很多。 [561]
· autouse 编译指示不适用于 Multi::Part::Function::Names。
· 呼叫者() 在某些情况下可能会导致核心转储。 鲤鱼有时受
这个问题。 特别是, 呼叫者() 现在返回“(未知)”的子程序名称
对于已从符号表中删除的子程序。
· 列表上下文中的chop(@list) 返回以相反顺序切碎的字符。 这
已反转为正确的顺序。 [561]
· 构建时配置不再包含 DBM 库(dbm、gdbm、db、ndbm)
Perl 二进制文件。 唯一的例外是需要它们的 SunOS 4.x。 [561]
· 非十进制但数字字符串常量(如“0x23”)的行为是平台性的
依赖:在某些平台中被视为 35,在某些平台中被视为 0,在某些平台中被视为浮动
点数(不要问)。 这是由 Perl 使用操作系统引起的
在字符串到数字转换的结果是
未定义:现在 Perl 在数字上下文中始终如一地处理零这样的字符串。
· 几个调试器修复:退出代码现在反映脚本退出代码,现在条件“0”
正确处理后,“d”命令现在检查行号 $。 不再得到
已损坏,如果 RemotePort 为
放。 [561]
· 调试器 (perl5db.pl) 已被修改以呈现更一致的命令
接口,通过 (CommandSet=580)。 还添加了 perl5db.t 来测试更改,并且作为
用于进一步测试的占位符。
请参阅 perldebug。
· 调试器有一个新的“dumpDepth”选项来控制嵌套的最大深度
结构被丢弃。 “x”命令已扩展,以便“x N EXPR”转储
的值 EXPR 至多深度 N 水平。
· 如果您有 CPAN 模块 PadWalker,调试器现在可以显示词法变量
安装。
· DESTROY 的顺序变得更加可预测。
· Perl 5.6.0 可能会发出有关重新定义 dl_错误() ,尤其是
将扩展静态构建到 perl 中。 这已得到纠正。 [561]
· dprofpp -R 不起作用。
· *foo{FORMAT} 现在可以工作了。
· Infinity 现在被识别为一个数字。
· UNIVERSAL::isa 不再错误地缓存方法。 (这打破了 Tk 扩展
与 5.6.0.) [561]
· 词法 I:在 eval "" 之外的词法在子程序中没有被正确解析
eval "" 中的定义,如果它们尚未在顶层引用
eval""ed 代码。
· 词法 II:词法在文件范围内泄漏到之前声明的子程序中
词汇。
· 词法警告现在可以在范围之间正确传播并进入“eval“...””。
· “使用警告 qw(FATAL all)”没有按预期工作。 这已得到纠正。 [561]
· 警告::启用() 如果调用者没有使用,现在正确报告 $^W 的状态
词汇警告。 [561]
· 使用 eval 和“#line”重新编号的行现在可以工作了。 [561]
· 修复了大量内存泄漏,尤其是在 eval "" 中。
· 本地化绑定变量不再泄漏内存
使用领带::哈希;
绑定我的 %tied_hash => 'Tie::StdHash';
...
# 用于每次调用 local() 时泄漏内存;
# 在一个循环中,这加起来了。
本地($tied_hash{Foo})= 1;
· 本地化的散列元素(和 %ENV)正确地未本地化为不存在,如果它们
在它们被本地化之前没有。
使用领带::哈希;
绑定我的 %tied_hash => 'Tie::StdHash';
...
# 到目前为止还没有设置 FOO 元素
{ 本地 $tied_hash{FOO} = 'Bar' }
# 这曾经可以打印,但现在不是。
打印 "exists!\n" 如果存在 $tied_hash{FOO};
作为此修复程序的副作用,绑定哈希接口 必须 定义 EXISTS 和 DELETE
方法。
· 目录() 现在按照 POSIX 的要求,忽略目录名称中的尾部斜杠。
· 某些版本的 glibc 已损坏 修改(). 这会影响构建
“-Duselongdouble”。 此版本的 Perl 检测到这种损坏并有解决方法
为了它。 已知 glibc 版本 2.2.2 修复了 修改() 错误。
· 无符号数的模数现在有效(4063328477 % 65535 用于返回 27406,
而不是 27047)。 [561]
· 消除了 5.6.0 中引入的一些“非数字”警告以更兼容
5.005。 无穷大现在被认为是一个数字。 [561]
· 在某些情况下,数字转换无法正确识别字符串值的变化。
情况。 [561]
· 属性(例如:shared)不起作用 我们的().
· 我们的() 变量不会导致虚假的“变量不会保持共享”警告。 [561]
· 在两个同级块中声明的同名变量“our”导致伪造
关于变量“重新声明”的警告。 问题已得到纠正。
[561]
· 包“Z”现在正确地用“\0”终止字符串。
· 修复一些影子密码平台(例如HP-UX)导致的密码例程
获取() 返回所有其他条目。
· PERL5OPT 环境变量(用于将命令行参数传递给 Perl)没有
为多个选项工作。 [561]
· 带有嵌入空格的 PERL5OPT 不起作用。
· 打印输出() 不再将数字语言环境重置为“C”。
· "qw(a\\b)" 现在可以正确解析为 'a\\b':也就是说,解析为三个字符,而不是四个。
[561]
· pos() 在早期版本中没有在 s///ge 中返回正确的值。 这是现在
正确处理。 [561]
· 使用 printf/sprintf 打印四边形(64 位整数)现在无需 q L ll
前缀(假设您在具有四功能的平台上)。
· 引用和重载标量上的正则表达式现在可以工作了。 [561+]
· 右手边魔法(GMAGIC)在很多情况下都可以,比如字符串连接
调用了太多次。
· 标量() 现在即使在空上下文中使用时也强制标量上下文。
· SOCKS 支持现在更加强大。
· 种类() 参数现在在正确的 wantarray 上下文中编译(它们是
不小心使用了上下文 种类() 本身)。 比较块现在运行
在标量上下文中,要排序的参数始终提供列表上下文。
[561]
· 更改了 POSIX 字符类“[[:space:]]”以包含(很少使用)
垂直制表符。 添加了一个新的 POSIX-ish 字符类 "[[:blank:]]"
代表水平空白(目前是空格和制表符)。
· 污染行为 冲刺() 已经合理化。 它不会污染
浮点格式的结果不再,使行为与
字符串插值。 [561]
· 一些不一致的污点传播情况(例如在哈希值内)已经
固定的。
· 在 Perl 5.6.0 中发现的 RE 引擎意外地悲观了某些简单的
模式匹配。 这些现在处理得更好。 [561]
· 现在正则表达式调试输出(无论是通过“use re 'debug'”还是通过“-Dr”)
看起来更好。 [561]
· 像 ""a\nxb\n" =~ /(?!\A)x/m" 这样的多行匹配存在缺陷。 该错误已
固定的。 [561]
· 在某些情况下,使用 $& 可能会触发核心转储。 现在可以避免这种情况。 [561]
· 正则表达式捕获的子匹配 ($1, $2, ...) 现在更加一致
如果匹配失败,则取消设置,而不是在其中留下虚假数据。 [561]
· 阅读线() 在“slurp”模式下打开的文件上可能会返回一个额外的“”(空白行)
在某些情况下结束。 这已得到纠正。 [561]
· 自动激活 perlvar 中描述的特殊变量的符号引用(如
in "${$num}") 被意外禁用。 现在又可以使用了。 [561]
· Sys::Syslog 忽略了“LOG_AUTH”常量。
· $自动加载, 种类(), 锁(), 并在多个线程中产生子进程
同时现在是线程安全的。
· Tie::Array 的 SPLICE 方法被破坏。
· 在非修改 tr 的左侧允许只读字符串///.
· 如果“STDERR”被绑定,由“warn”和“die”引起的警告现在正确地传递给它。
· 几个 Unicode 修复。
· Perl 文件(脚本、模块)开头的 BOM(字节顺序标记)
现在应该透明地跳过。 UTF-16 和 UCS-2 编码的 Perl 文件
现在应该可以正确阅读了。
· 字符表已更新为 Unicode 3.2.0。
· 与 utf8 数据比较不会神奇地将非 utf8 数据升级为 utf8。
(例如,如果您混合来自 I/O 和 Unicode 的数据,这就是一个问题
数据:您的输出可能被神奇地编码为 UTF-8。)
· 生成非法的 Unicode 代码点,例如 U+FFFE 或 UTF-16
代理,现在也生成一个可选的警告。
· “IsAlnum”、“IsAlpha”和“IsWord”现在匹配标题大小写。
· 与“.”连接运算符或通过变量插值,“eq”,
"substr", "reverse", "quotemeta", "x" 操作符, 替换为 "s///",
单引号 UTF-8,现在应该可以工作了。
· "tr///" 操作符现在可以工作了。 请注意,“tr///CU”功能具有
已被删除(但请参阅 pack('U0', ...))。
· "eval "v200"" 现在可以工作了。
· Perl 5.6.0 解析 m/\x{ab}/ 不正确,导致虚假警告。 这
已更正。 [561]
· Unicode 类(例如“IsDigit”)中缺少零个条目。
· 大的无符号数(2**31 以上)有时会失去无符号性,
导致算术运算的虚假结果。 [561]
· Perl 解析器已使用随机输入和马尔可夫链输入进行了压力测试
少数发现的崩溃和锁定已得到修复。
平台 获得每个 更改 和 修复
· BSDI 4.*
Perl 现在可以在 4.0 后的 BSD/OS 上运行。
· 所有 BSD
设置 $0 现在可以工作(尽可能多地;有关详细信息,请参阅 perlvar)。
· 赛格温
大量更新; 目前与 Cygwin 1.3.10 同步。
· 以前 DYNIX/ptx 在其非阻塞 I/O 的配置探针中存在问题。
·EPOC
EPOC 现在得到更好的支持。 请参阅 README.epoc。 [561]
· FreeBSD 3.*
Perl 现在可以在 3.0 后的 FreeBSD 上运行。
· HP-UX
README.hpux 更新; “配置-Duse64bitall”现在有效; 现在使用 HP-UX malloc
而不是 Perl malloc。
·爱丽丝
大量编译标志和提示增强; 意外混合 32 位和
64 位库(一个注定失败的尝试)变得更加困难。
· Linux
· 长双打现在应该可以工作了(见安装)。 [561]
· Linux 之前在使用时遇到了与 sockaddrlen 相关的问题 接受(),
接收() (在 Perl 中: recv()), 获取对等点名称()及 获取名称().
·Mac OS 经典
如果您现在可以在 Mac OS Classic 中编译标准 Perl 发行版
拥有 Metrowerks 开发环境和缺少的 Mac 特定工具包位。
有关详细信息,请联系 macperl 邮件列表。
· MPE/iX
Perl 5.6.0 之后的 MPE/iX 更新。 请参阅 README.mpeix。 [561]
· NetBSD/threads:尝试安装 GNU pth(应该在包集合中,或者
http://www.gnu.org/software/pth/),并使用 -Duseithreads 进行配置。
· NetBSD/sparc
Perl 现在可以在 NetBSD/sparc 上运行。
· 操作系统/2
现在可与 usethreads 一起使用(请参阅安装)。 [561]
· 索拉里斯
使用 Sun Workshop 编译器的 64 位现在可以工作。
· 层云 VOS
本机构建方法至少需要 VOS 版本 14.5.0 和 GNU C++/GNU 工具
2.0.1 或更高版本。 Perl pack 函数现在将溢出的值映射到 +infinity 和
下溢值到 -infinity。
· Tru64(又名 Digital UNIX,又名 DEC OSF/1)
操作系统版本号现在记录在 $Config{osvers} 中。 允许编译
使用 gcc(以前明确禁止)。 还是不推荐用 gcc 编译
因为错误的代码结果,即使使用 gcc 2.95.2。
· 独角兽
修复了在构建过程中导致核心转储的各种对齐问题或
之后; 不再死于运行时的数学错误; 现在使用完整的四边形整数(64
位),以前只使用 46 位整数来提高速度。
· 虚拟机
请参阅“VMS 中的动态套接字扩展”和“IEEE 格式浮点默认值”
OpenVMS Alpha”用于此处未列出的重要更改。
目录目录() 尽管有 CRT 错误,现在效果更好; 现在可以与 MULTIPLICITY 一起使用(请参阅安装);
现在可以与 Perl 的 malloc 一起使用。
通过“键”或“值”对 %ENV 元素进行污染以前未实现。 它
现在按记录工作。
“waitpid”仿真已得到改进。 最糟糕的错误(现已修复)是 pid
of -1 将导致系统上所有进程的通配符搜索。
POSIX 风格的信号现在在 7.0 之前的 VMS 版本上模拟得更好。
“系统”功能和反引号运算符具有改进的功能和更好的
错误处理。 [561]
文件访问测试现在使用当前进程权限而不是用户的默认权限
权限,这有时会导致报告的访问权限和
实际访问。 此改进仅适用于 VMS v6.0 及更高版本。
有一个基于“sys$sigprc”的新“kill”实现,它允许旧的 VMS
系统(7.0 之前)使用“kill”来发送信号,而不是简单地强制退出。 这
实现还允许以后的系统从信号处理程序中调用“kill”。
迭代逻辑名称翻译现在限制为 10 次迭代,以模仿
SHOW LOGICAL 和其他 OpenVMS 工具。
· 窗户
· 信号处理现在比以前效果更好。 它现在使用实现
Windows 消息循环,因此不太容易发生随机崩溃。
· 叉子() 仿真现在更加强大,但仍然有一些
深奥的错误和警告。 有关详细信息,请参阅 perlfork。 [561+]
· 失败的(伪)fork 现在返回 undef 并将 errno 设置为 EAGAIN。 [561]
· 以下模块现在可在 Windows 上运行:
ExtUtils::嵌入 [561]
IO::管道
IO::民意调查
网络::平
· IO::文件::new_tmpfile() 不再限于每个进程 32767 次调用。
· 更好的 目录目录() 返回一个不存在的目录的值。
· 现在支持使用 64 位平台 SDK 工具编译 perl。
· Win32::SetChildShowWindow() 函数 内置可用于控制可见性
由子进程创建的窗口。 有关详细信息,请参阅 Win32。
· 支持子进程(或伪进程)的非阻塞等待
“waitpid($pid, &POSIX::WNOHANG)”。
· 行为 系统() 与多个论点已被合理化。 每个
未引用的参数将被自动引用以保护空格,并且任何
参数中的现有空格将被保留。 这提高了
系统的可移植性(@args)通过避免对 Windows“cmd”shell 的需要
perl 程序中的特定引用。
请注意,这意味着一些脚本可能依赖于早期的错误
行为可能不再正常工作。 例如,"system("nmake /nologo",
@args)" 现在将尝试运行文件 "nmake /nologo",并且会在以下情况下失败
找不到这样的文件。 另一方面,perl 现在将执行这样的代码
作为“系统(“c:/Program Files/MyApp/foo.exe”,@args)”正确。
· perl 头文件不再抑制来自 Microsoft 的常见警告
Visual C++ 编译器。 这意味着现在可能会出现额外的警告
编译 XS 代码。
· Borland C++ v5.5 现在是一个可以构建 Perl 的受支持的编译器。 然而,
生成的二进制文件继续与由
其他支持的编译器(GCC 和 Visual C++)。 [561]
· 带有 open(F, ">&MYSOCK") 的 Duping 套接字句柄现在可以在 Windows 9x 下工作。
[561]
· %ENV 中的当前目录条目现在可以正确传播到子目录
过程。 [561]
· 新的 %ENV 条目现在传播到子进程。 [561]
· Win32::GetCwd() 在驱动器根目录下正确返回 C:\ 而不是 C:。
中的其他错误 目录目录() 和 CWD::CWD() 也已修复。 [561]
· makefiles 现在默认使用 ActiveState ActivePerl 中启用的功能(a
流行的 Win32 二进制发行版)。 [561]
· HTML 文件现在将安装在 c:\perl\html 中,而不是
c:\perl\lib\pod\html
· REG_EXPAND_SZ 键现在允许在 perl 使用的注册表设置中。 [561]
· 现在可以 发送() 从所有线程,而不仅仅是第一个线程。 [561]
· ExtUtils::MakeMaker 现在使用 $ENV{LIB} 来搜索库。 [561]
· 每个线程保留的堆栈更少,以便更多线程可以同时运行。
(每个线程仍然 16M。)[561]
· "File::Spec->tmpdir()" 现在更喜欢 C:/temp / tmp目录 (当 perl 时效果更好
正在作为服务运行)。
· 在 ithreads 下更好的 UNC 路径处理。 [561]
· 等待(), 等待pid(),并且反引号现在返回正确的退出状态
视窗 9x。 [561]
· 一个套接字句柄泄漏 接受() 已修复。 [561]
全新 or 更改 诊断
有关详细信息,请参阅 perldiag。
· 音译运算符(如 az-9)中的不明确范围现在会发出警告。
· chdir("") 和 chdir(undef) 现在给出弃用警告,因为它们会导致
可能无意 chdir 到主目录。 说 目录目录() 如果你真的是说
那。
· 添加了两个新的调试选项:如果你编译你的 Perl
调试,您可以使用 -DT [561] 和 -DR 选项来跟踪标记化并添加
分别对显示变量的引用计数。
· 词法警告类别“已弃用”不再是“语法”的子类别
类别。 它现在本身就是一个顶级类别。
· 朴实无华 倾倒() 现在将给出警告建议使用显式 核心::转储() if
这才是真正的意思。
· “无法识别的转义”警告已扩展为包括“\8”、“\9”和“\_”。
无需转义任何“\w”字符。
· 现在希望所有正则表达式编译错误消息更容易
了解两者,因为错误消息现在出现在失败的正则表达式之前,并且
因为故障点现在清楚地标有“<-- HERE”标记。
· 各种 I/O(和套接字)功能,如 二进制模式(), 关(),等等现在更多
如果它们被不合逻辑地用于尚未打开或
已经关闭的文件句柄(或套接字)。
· 使用 LSTAT() 在文件句柄上现在给出警告。 (这是一件毫无意义的事情。)
· 如果您没有提供模块名称,“-M”和“-m”选项现在会发出警告。
· 如果你在“使用”中指定了所需的最低版本,模块名称匹配但
不定义 $VERSION 将导致致命失败。
· 使用负偏移量 向量() 在左值上下文中现在是一个可警告的罪行。
· 奇数个参数重载::constant 现在会引发警告。
· 匿名哈希中的奇数元素现在会引发警告。
· 各种“仅用于”、“关闭”、“从未打开”的警告删除了“main::”
“main”包中文件句柄的前缀,例如“STDIN”而不是
“主::标准输入”。
· 现在更仔细地检查子程序原型,例如,您可能会收到警告
如果您使用了非原型字符。
· 如果尝试使用(非祝福)引用作为数组索引,则会发出警告
给定的。
· “推@a;” 和“unshift @a;” (没有要推送或取消移位的值)现在发出警告。
这可能是生成和评估代码的问题。
· 如果你试图在 perlfunc 中“打包”一个小于 0 或大于 255 的数字,使用“C”
格式你会得到一个可选的警告。 类似的“c”格式和数字
小于 -128 或大于 127。
· 包“P”格式现在需要明确的大小。
· unpack "w" 现在警告未终止的压缩整数。
· 添加了与使用 PerlIO 相关的警告。
· 某些正则表达式修饰符,例如“(?o)”,只有在应用于整个正则表达式时才有意义。
如果您尝试不这样做,您将收到可选警告。
· 变长lookbehind还没有实现,尝试使用就知道了
那。
· 使用数组或哈希作为引用(例如,“%foo->{bar}”已被弃用
尽管。 现在您将收到一个可选警告。
· 添加了与使用新的受限哈希功能相关的警告。
· 不支持数组和哈希的自绑定,即使在
尝试这样做。
· 在标量上下文中使用“排序”现在会发出一个可选警告。 这没有做
任何有用的东西,因为没有执行排序。
· 使用 /g 修饰符 分裂() 是没有意义的,会引起警告。
· 使用 拼接() 超过数组末尾现在会导致警告。
· 格式错误的 Unicode 编码(UTF-8 和 UTF-16)会导致很多警告,就像尝试一样
使用 UTF-16 代理(未实现)。
· 尝试在 I/O 流上使用 Unicode 字符而不标记流的
编码(使用 打开() or 二进制模式()) 将导致“宽字符”警告。
· 在 use/require 中使用 v-strings 会导致(向后)可移植性警告。
· 有关使用解释器线程及其共享数据的警告已被
补充说。
更改 内幕
· PerlIO 现在是默认设置。
· perlapi.pod(perlguts 的一个伴侣)现在尝试记录内部 API。
· 您现在可以构建一个真正最小的 perl,称为 microperl。 构建 microperl 不会
甚至需要运行配置; “make -f Makefile.micro”应该足够了。 谨防:
microperl 做了很多假设,其中一些可能过于大胆; 所结果的
可执行文件可能会以奇妙的方式崩溃或以其他方式出现异常。 对于细心的黑客
只。
· 添加 信号(), 哪个信号(), do_join()、op_clear、op_null、 ptr_table_clear(),
ptr_table_free(), sv_setref_uv(),以及公开 API 的几个 UTF-8 接口。
有关可用 API 的完整列表,请参阅 perlapi。
· 可以通过以下方式传播自定义异常 发牢骚()ING。
· 现在 xsubs 可以像 subs 一样拥有属性。 (好吧,至少内置
属性。)
· dTHR 和 djSP 已被淘汰; 前者被移除(因为它是无操作的)和
后者被 dSP 取代。
· PERL_OBJECT 已被完全删除。
· MAGIC 常量(例如“P”)已被宏化(例如“PERL_MAGIC_TIED”)以获得更好的效果
源代码的可读性和可维护性。
· 正则表达式编译器现在维护一个结构,该结构标识已编译的节点
具有原始正则表达式的相应句法特征的字节码。
该信息附加到“struct regexp”的新“offsets”成员。 看
perldebguts 以获得更完整的信息。
· C 代码变得更加“gcc -Wall”干净。 仍然有一些警告信息
保留在某些平台上,因此如果您使用 gcc 进行编译,您可能会看到一些警告
关于可疑的做法。 警告正在处理中。
· perly.c, svc及 SV.h 现在已经被广泛评论。
· 关于如何使用 Perl 源代码库的文档已添加到
移植/repository.pod.
· 现在有几个分析生成目标。
安全性 漏洞 不营业 [561]
(此更改已在 5.7.0 中进行,但此处需要重复。)(5.7.0 之前出现
5.6.1:开发分支 5.7 早于维护分支 5.6 发布)
Perl 的可选 suidperl 组件中的一个潜在安全漏洞是
于 2000 年 XNUMX 月确定。默认情况下既不构建也不安装 suidperl。 作为
2001 年 XNUMX 月,唯一已知的易受攻击的平台是 Linux,很可能都是 Linux
分布。 CERT 和各种供应商和分销商已收到有关
脆弱性。 看 http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt
更多信息。
该问题是由 Perl 试图报告可疑的安全漏洞利用尝试引起的
外部程序 /bin/mail。 在 Linux 平台上,/bin/mail 程序有一个
未记录的功能,当与 suidperl 结合使用时,可以访问 root shell,
导致严重妥协,而不是报告漏洞利用尝试。 如果你不
有 /bin/mail,或者如果你有“安全的 setuid 脚本”,或者如果没有安装 suidperl,你
很安全
漏洞利用尝试报告功能已从 Perl 5.8.0(以及
维护版本 5.6.1,并且它也从所有 Perl 5.7 版本中删除),所以
该特定漏洞不再存在。 然而,进一步的安全
不幸的是,漏洞总是可能的。 suidperl 功能最
可能会在 Perl 5.10 中被删除。 在任何情况下,suidperl 只能由
确切知道自己在做什么以及为什么使用 suidperl 的安全专家
而不是其他一些解决方案,例如 sudo (请参阅 http://www.courtesan.com/sudo/ ).
全新 检测
增加了几个新的测试,特别是对于 LIB 和 分机 小节。 有
现在大约 69 000 个单独的测试(分布在大约 700 个测试脚本中),在回归中
套件(5.6.1 有大约 11 个测试,在 700 个测试脚本中)确切的数字取决于
使用的平台和 Perl 配置。 许多新的测试当然是由
新模块,但总的来说 Perl 现在经过了更彻底的测试。
由于大量测试,运行回归套件将花费大量时间
比以前更长的时间:预计套件的运行时间比以前长 4-5 倍
在 perl 5.6 中。 在一台非常快的机器上,您可以希望在大约 6 到 8 分钟内完成该套件
分钟(挂钟时间)。
现在报告测试的顺序与早期 Perls 不同。 (有时候是这样的
因为 t/lib 下的测试脚本已经移到更靠近
他们正在测试的库/扩展。)
已知的 问题
这款 编译器 套件 Is 仍 很 实验
编译器套件正在慢慢变得更好,但它仍然是高度实验性的。
不鼓励在生产环境中使用。
本地化 绑 阵列 和 哈希 Is 破
本地 %tied_array;
不像预期的那样工作:旧值被错误地恢复。 这将是
在未来的版本中发生了变化,但我们还不知道新的语义究竟是什么。
在任何情况下,更改都会破坏依赖于当前(定义不明确)的现有代码
语义,所以通常避免这样做。
建筑物 扩展 能够 失败 计划 Of 大文件
众所周知,像 mod_perl 之类的一些扩展与 `largefiles' 存在问题,带来的变化
在 Perl 5.6.0 中,文件偏移默认为 64 位宽(如果支持)。 模块可能
根本无法编译,或者它们可能编译和工作不正确。 目前,没有
该问题的良好解决方案,但配置现在提供适当的非大文件
%Config 哈希中的 ccflags、ldflags、libswanted 和 libs(例如,
$Config{ccflags_nolargefiles}) 所以有问题的扩展可以尝试
在没有大文件的情况下配置自己。 诚然,这不是一个干净的
解决方案,并且该解决方案甚至可能根本不起作用。 一种潜在的失败是
可以(或者,如果可以,是否是一个好主意)将所有二进制文件链接在一起
关于文件偏移的不同想法; 所有这些都取决于平台。
修改 $_ 内 为了(..)
对于 (1..5) { $_++ }
毫无怨言地工作。 它不应该。 (您应该只能修改左值
循环内的元素。)您可以通过将 1..5 替换为
1 2,3,4,5。
mod_perl 1.26 不会 构建 在 螺纹的 Perl的
使用 mod_perl 1.27 或更高版本。
lib/ftmp-安全 测试 警告 '系统 或者 不安全'
不要惊慌。 请阅读 INSTALL 的“make test”部分。
libwww-perl (轻工) 失败 基准/日期 #51 展位
使用 libwww-perl 5.65 或更高版本。
PDL 失败 一些 测试
使用 PDL 2.3.4 或更高版本。
Perl_get_sv
您可能会收到诸如“未定义符号“Perl_get_sv”或“无法解析符号”之类的错误
'Perl_get_sv'”,或者符号可能是“Perl_sv_2pv”。这可能意味着你是
尝试在 Perl 中使用较旧的共享 Perl 库(或与之链接的扩展)
5.8.0 可执行文件。 Perl 曾经有这样一个子例程,但现在已经不是这样了。
检查您的共享库路径,以及这些目录中的所有共享 Perl 库。
有时这个问题也可能表明部分 Perl 5.8.0 安装,请参阅“Mac OS X
dyld 未定义符号”作为示例以及如何处理它。
自绑 问题
数组和哈希的自绑定以相当深且难以修复的方式被破坏。 作为一个停止 -
差距措施,以避免人们对神秘的结果感到沮丧(核心转储,
大多数情况下),现在是禁止的(即使尝试也会出现致命错误)。
对 glob 的自绑定的更改导致它们被递归引用(参见:“Two-
Perlobj 中的 Phased Garbage Collection”)。您现在需要一个显式的 untie 来销毁一个
自绑球。 此行为可能会在以后修复。
标量和 IO 事物的自绑定有效。
分机/线程/t/libc
如果此测试失败,则表明您的 libc(C 库)不是线程安全的。 这
特定的测试压力测试 当地时间() 调用以确定它是否是线程安全的。
有关详细信息,请参阅 perlthrtut。
失败 of Thread (5.005 式) 测试
备注 这 支持 的5.005风格 穿线 is 已弃用, 试验 和 几乎
不支持。 In it is 预期 至 be 除去。 您 应该 迁移 您的 码 至
线程。
由于 5.005 线程中的基本问题,已知以下测试会失败
执行。 这些不是新的失败——Perl 5.005_0x 有相同的错误,但没有
有这些测试。
../ext/B/t/外部参照.t 255 65280 14 12 85.71% 3-14
../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7
../lib/English.t 2 512 54 2 3.70% 2-3
../lib/FileCache.t 5 1 20.00% 5
../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3
../lib/Filter/Simple/t/filter_only。 9 3 33.33% 1-2 5
../lib/Math/BigInt/t/bare_mbf.t 1627 4 0.25% 8 11 1626-1627
../lib/Math/BigInt/t/bigfltpm.t 1629 4 0.25% 10 13 1628-
1629
../lib/Math/BigInt/t/sub_mbf.t 1633 4 0.24% 8 11 1632-1633
../lib/Math/BigInt/t/with_sub.t 1628 4 0.25% 9 12 1627-1628
../lib/Tie/File/t/31_autodefer.t 255 65280 65 32 49.23% 34-65
../lib/autouse.t 10 1 10.00% 4
操作/翻转.t 15 1 6.67% 15
这些故障不太可能得到修复,因为考虑了 5.005 样式的线程
从根本上破坏。 (基本上发生的事情是竞争线程可能会损坏
共享全局状态,一个很好的例子是正则表达式引擎的状态。)
定时 问题
由于计时问题,以下测试可能会间歇性失败,例如,如果
系统负载很重。
t/op/alarm.t
分机/时间/HiRes/HiRes.t
库/Benchmark.t
lib/Memoize/t/expmod_t.t
lib/Memoize/t/speed.t
如果失败,请尝试手动运行它们,例如
./perl -Ilib ext/Time/HiRes/HiRes.t
捆绑/魔法 数组/哈希 元素 Do 不 自动激活
对于普通数组 "$foo = \$bar[1]" 会将 "undef" 分配给 $bar[1] (假设它
以前不存在),但是对于绑定/神奇的数组和散列,这样的自动生存确实
不会发生,因为目前没有办法捕捉引用的创建。 相同
问题会影响对绑定/神奇数组/散列的不存在索引/键的切片。
统一 in 包/类 和 子程序 名称 不 而不去 工作
标识符名称中可以包含 Unicode,但包/类或子例程名称中不能包含 Unicode。
虽然从 Perl 5.8.0 开始确实存在一些有限的功能,但更多的是
意外超出设计; 不支持将 Unicode 用于上述目的。
这种未完成的原因之一是它(当前)固有的不可移植性:因为两者
包名称和子程序名称可能需要映射到文件和目录名称,
文件系统的 Unicode 能力变得很重要——不幸的是没有
便携式答案。
平台 获得每个 问题
AIX
· 如果使用 AIX 原生的 make 命令,而不是仅仅“make”发出“make all”。 在
众所周知,前者的某些设置会虚假地尝试运行“make install”。
或者,您可能想要使用 GNU make。
· 在 AIX 4.2 中,使用 C++ 函数的 Perl 扩展可能会出现问题
因为静态没有被初始化。 在较新的 AIX 版本中,这是
通过将 Perl 与 libC_r 库链接来解决,但不幸的是在 AIX 4.2 中说
库有一个晦涩的错误,其中与时间相关的各种功能(例如 时间()
和 获取时间()) 返回损坏的值,因此在 AIX 4.2 中 Perl 没有链接
针对 libC_r。
· vac 5.0.0.0 可能会为 Perl 生成错误代码
AIX C 编译器 vac 版本 5.0.0.0 可能会产生错误代码,从而导致一些
随机测试在作为“make test”的一部分运行时失败,但是当失败的测试是
手动运行,他们成功了。 我们建议至少升级到 vac 版本 5.0.1.0,即
已知可以正确编译 Perl。 “lslpp -L|grep vac.C”会告诉你 vac
版本。 请参阅 README.aix。
· 如果构建线程化 Perl,你可能会从 pp_sys.c 得到编译警告:
“pp_sys.c”,第 4651.39 行:1506-280 (W) 不允许在类型“unsigned char*”和“const void*”之间分配函数参数。
这是无害的; 它是由 获取netbyaddr() 和 获取netbyaddr_r() 有
第一个参数的类型略有不同。
阿尔法 系统 - 旧 海湾合作委员会 失败 几个 测试
如果你看到 op/pack、op/pat、op/regexp 或 ext/Storable 测试在 Linux/alpha 或
*BSD/Alpha,是时候升级你的 gcc 了。 2.95.3 之前的 gcc 肯定是
不够好,gcc 3.1 可能会更好。 (RedHat Linux/alpha 与 gcc 3.1
报告没有问题,Linux 2.4.18 和 gcc 2.95.4 也是如此。)(在 Tru64 中,最好
使用捆绑的 C 编译器。)
阿米加操作系统
Perl 5.8.0 没有在 AmigaOS 中构建。 它在 ithreads 工作期间的某个时候坏了,并且
我们找不到 Amiga 专家来解决问题。 Perl 5.6.1 仍然适用于
AmigaOS(与 5.7.2 开发版本一样)。
Beos
以下测试在 BeOS Personal 5.8.0 中的 5.03 Perl 上失败:
t/op/lfs.......................在测试 17 时失败
t/op/magic.......................在测试 24 时失败
ext/Fcntl/t/syslfs .....................在测试 17 时失败
ext/File/Glob/t/basic.............在测试 3 中失败
ext/POSIX/t/sigaction ......在测试 13 时失败
ext/POSIX/t/waitpid........测试 1 失败
(请注意: 更多信息可在 自述文件 直到对 BeOS 的支持在
Perl v5.18.0)
Cygwin的 “无法 至 重新映射"
例如,在为 Cygwin 构建 Tk 扩展时,您可能会收到一条错误消息:
“无法重新映射”。 这是 Cygwin 的已知问题,解决方法在
这里: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html
Cygwin的 数据库 测试 失败 on 脂肪
可以在 FAT 文件系统上构建但不能安装(或测试构建)NDBM_File。
在 NTFS 上安装(或构建)工作正常。 如果有人尝试在 FAT 安装(或
build) 预计会出现以下故障:
../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71
../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ??
../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4
../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11
../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4
运行/fresh_perl.t 97 1 1.03% 91
NDBM_File 失败,ODBM_File 只是核心转储。
如果您打算仅在 FAT 上运行(或者如果在 FAT 上使用 AnyDBM_File),请使用
-Ui_ndbm 和 -Ui_dbm 选项可防止构建 NDBM_File 和 ODBM_File。
DJGPP 故障
t/op/stat.......................在测试 29 时失败
lib/File/Find/t/find..................在测试 1 中失败
lib/File/Find/t/taint................在测试 1 中失败
lib/h2xs.......................在测试 15 时失败
lib/Pod/t/eol........................在测试 1 中失败
lib/Test/Harness/t/strap-analyze .....在测试 8 时失败
lib/Test/Harness/t/test-harness......在测试 23 时失败
lib/Test/Simple/t/exit.............在测试 1 时失败
从 5.8.0 开始,上述故障被称为具有长文件名的本地构建,但是有
由于dosemu的限制(可能还有错误),如果在dosemu下运行还有一些:
t/comp/cpp.......................在测试 3 中失败
t/op/inccode.............(崩溃)
和一些 lib/ExtUtils 测试,以及数百个有效的 Encode/t/Aliases.t 失败
长文件名很好。 所以你真的可能更喜欢原生构建和长文件名。
FreeBSD的 建 - 线程 核心转储 阅读 大 目录
这是 FreeBSD 4.5 中的一个已知错误 读取目录_r(),它已在 FreeBSD 4.6 中修复(参见
perlfreebsd (README.freebsd))。
FreeBSD的 错误 当地 测试 117 对于 ISO 8859-15 当地
ISO 8859-15 语言环境可能无法通过 FreeBSD 中的语言环境测试 117。 这是由
字符 \xFF(带分音符的 y)和 \xBE(带分音符的 Y)在以下情况下行为不正确
不区分大小写匹配。 貌似这个问题最近已经修复了
FreeBSD 发行版。 ( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308)
IRIX 失败 ext/列表/Util/t/shuffle.t or 摘要::MD5
带有 MIPSpro 7.3.1.2m 或 7.3.1.3m 编译器的 IRIX 可能无法通过 List::Util 测试
ext/List/Util/t/shuffle.t 通过转储核心。 这似乎是一个编译器错误,因为如果
用 gcc 编译没有核心转储,并且在上述测试中没有发现失败
任何其他平台。
同样,已知构建 Digest::MD5 扩展会失败并出现“*** Termination
代码 139 (bu21)”。
解决方法是降低优化级别(配置 -Doptimize=-O2)。
HP-UX 库/posix 分测验 9 失败 什么时候 LP64-配置
如果perl配置了-Duse64bitall,则子测试10的成功结果
lib/posix 可能在 subtest 9 的成功结果之前到达,这使
测试工具太多以至于它认为子测试 9 失败了。
Linux - glibc的 2.2.5 失败 t/操作/int 子测验 #6 - -Duse64位int
这是 glibc 2.2.5 中带有 long long 整数的已知错误。 (
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612)
Linux 在 菲奥 失败 操作/杂项 测试 48
没有已知的修复。
Mac OS X
请记住在之前将您的环境变量 LC_ALL 设置为“C”(setenv LC_ALL C)
运行“make test”来避免很多关于 Mac OS X 损坏的语言环境的警告。
已知以下测试在 Mac OS X 10.1.5 中因错误(旧)而失败
Mac OS X 中包含的 Berkeley DB 实现:
失败的测试统计 Wstat 总失败 失败 失败列表
-------------------------------------------------- -----------------------
../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ??
../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65
如果您在 UFS 分区上构建,您可能还会看到 t/op/stat.t subtest #9
失败。 这是由于达尔文的 UFS 不支持 inode 更改时间造成的。
ext/POSIX/t/posix.t 子测试 #10 也失败了,但现在被跳过了,因为
失败是 Apple 的错,而不是 Perl 的错(阻塞信号丢失)。
如果您使用 ithreads 进行配置,则 ext/threads/t/libc.t 将失败。 同样,这不是 Perl 的
错误——Mac OS X 的 libc 不是线程安全的(在这个特定的测试中, 当地时间()
调用被发现是线程不安全的。)
Mac OS X 迪尔德 未定义 符号
例如,如果在安装 Perl 5.8.0 后收到有关缺少符号的警告
dyld: perl 未定义的符号
_perl_sv_2pv
_perl_get_sv
您可能在 /Library/Perl 中有一个旧的 pre-Perl-5.8.0 安装(或其中的一部分)
(在 5.8.0 之前的 Perls 中曾经存在未定义的符号)。 似乎出于某种原因
“make install”并不总是完全覆盖 /Library/Perl 中的文件。 你可以
像这样将旧的 Perl 共享库移开:
cd /库/Perl/darwin/CORE
MV libperl.dylib libperlold.dylib
然后重新发出“make install”。 请注意,上述内容当然是极具破坏性的
对于任何使用 /usr/local/bin/perl 的东西。 如果这没有帮助,您可能需要尝试
从 /Library/Perl 下删除所有 .bundle 文件,然后再次“make install”。
OS / 2 测试 故障
已知以下测试在 OS/2 上失败(为清楚起见,仅显示失败,
不是完整的错误消息):
../lib/ExtUtils/t/Mkbootstrap.t 1 256 18 1 5.56% 8
../lib/ExtUtils/t/Packlist.t 1 256 34 1 2.94% 17
../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14
lib/os2_process.t 2 512 227 2 0.88% 174 209
lib/os2_process_kid.t 227 2 0.88% 174 209
库/rx_cmprt.t 255 65280 18 3 16.67% 16-18
操作/sprintf 测试 和 130
已知 op/sprintf 测试 91、129 和 130 在某些平台上会失败。 例子
包括使用 sfio 和 Compaq/Tandem 的 NonStop-UX 的任何平台。
已知测试 91 在 QNX6 (nto) 上失败,因为 "sprintf '%e',0" 错误地产生
0.000000e+0 而不是 0.000000e+00。
对于测试 129 和 130,失败的平台不符合 ANSI C 标准:行
准确地说,是 ANSI X19 134 第 3.159 页上的 1989ff。 (他们产生“1”以外的东西
和“-1”,当使用 printf 格式“%.0.6f”格式化 0.6 和 -0 时; 大多数情况下,他们
产生“0”和“-0”。)
SCO
众所周知,在 SCO 3.2v5.0.4 中,socketpair 测试并不令人满意:
ext/Socket/socketpair.t.......失败测试 15-45
的Solaris 2.5
如果您仍在使用 Solaris 2.5(又名 SunOS 5.5),您可能会遇到故障(
测试核心转储)在 lib/locale.t 中。 建议的解决方法是升级您的 Solaris。
的Solaris x86 失败 检测 在 -Duse64位int
已知以下测试在 Solaris x86 中失败,Perl 配置为使用 64 位
整数:
ext/Data/Dumper/t/dumper ......在测试 268 时失败
ext/Devel/Peek/Peek........测试 7 失败
超级UX (NEC SX)
已知以下测试在 SUPER-UX 上失败:
op/64bitint .....................失败的测试 29-30、32-33、35-36
运算/算术......................失败的测试 128-130
op/pack .................. 测试失败 25-5625
操作/电源..................................
操作/污点..........................# msgsnd 失败
../ext/IO/lib/IO/t/io_poll............FAILED 测试 3-4
../ext/IPC/SysV/ipcsysv.......失败测试 2, 5-6
../ext/IPC/SysV/t/msg........失败的测试 2, 4-6
../ext/Socket/socketpair ........测试失败 12
../lib/IPC/SysV ........失败的测试 2、5-6
../lib/warnings........................失败的测试 115-116、118-119
op/pack 失败(“无法在 op/pack.t 第 126 行压缩负数”)很严重
但至今仍未解决。 它指出了 C 的签名处理的一些问题
编译器,64bitint、arith 和 pow 失败也是如此。 其余的大部分都指向问题
使用 SysV IPC。
术语::读取键 而不去 加工 on Win32
使用 Term::ReadKey 2.20 或更高版本。
UNICOS/MK
· 在配置期间,测试
猜测您的 C 编译器和预处理器定义了哪些符号...
可能会因错误消息而失败,例如
CC-20 cc:错误文件 = try.c,行 = 3
标识符“bad”未定义。
yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K
^
CC-65 cc:错误文件 = try.c,行 = 3
此时应使用分号。
这是由 UNICOS/mk 的 awk 实用程序中的错误引起的。 您可以忽略错误,
但它确实会引起一个小问题:您不能完全从 h2ph 实用程序中受益
(见 h2ph) 可用于将 C 头文件转换为 Perl 库,主要用于
能够从 Perl 访问使用 C 预处理器 cpp 定义的常量。 因为
上述错误,部分转换后的标头将不可见。 幸运的是,这些
几天对 h2ph 的需求很少见。
· 如果使用解释器线程(ithreads)构建 Perl, getgrent(), getgrnam()及
getgrgid() 由于存在错误,函数无法返回组成员列表
UNICOS/mk 的多线程支持。 这意味着在列表上下文中
函数将只返回三个值,而不是四个。
UTS
有一些已知的测试失败。 (请注意: 相关信息可在
自述文件 直到在 Perl v5.18.0 中删除了对 UTS 的支持)
您的 (层云)
当 Perl 在 VOS 版本 14.5.0 和 GNU C++/GNU 上使用本机构建过程构建时
工具 2.0.1,所有尝试的测试要么通过,要么导致 TODO(忽略)失败。
VMS
使用默认配置不应该报告测试失败,尽管有
标记为 TODO 的测试数量指向需要进一步调试和/或移植的区域
工作。
Win32
在多 CPU 机箱中,I/O 缓冲存在一些问题:可能会出现一些输出
两次。
XML::解析器 而不去 加工
使用 XML::Parser 2.31 或更高版本。
z /操作系统 (操作系统/390)
z/OS 有相当多的测试失败,但情况实际上比以前好得多
在 5.6.0 中; 只是添加了这么多新模块和测试。
失败的测试统计 Wstat 总失败 失败 失败列表
-------------------------------------------------- -------------------------
../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327
331 333 337 339
../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79
110-111 150 161
../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48
../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9
op/pat.t 922 7 0.76% 665 776 785 832-
834 845
运营/sprintf.t 224 3 1.34% 98 100 136
操作/ tr.t 97 5 5.15% 63 71-74
单/折叠.t 780 6 0.77% 61 169 196 661
710-711
dumper.t 和 downgrade.t 中的失败是测试中的问题,io_unix 和
sprintf 是 USS 中的问题(UDP 套接字和 printf 格式)。 拍打、tr 和折叠
失败是由 EBCDIC 引起的真正的 Perl 问题(在 pat 和 fold 的情况下,
将其与 Unicode 相结合)。 常量和嵌入可能是测试中的问题
(因为他们测试了 Perl 构建扩展的能力,这似乎是有效的
相当好。)
统一 客户支持 on EBCDIC 仍 斯波蒂
尽管大部分工作正常,但 Unicode 支持在 EBCDIC 平台上仍然存在问题。 一
这样的已知点是代码点的“\p{}”和“\P{}”正则表达式构造
小于 256:“pP”正在测试 Unicode 代码点,不知道 EBCDIC。
看 In Perl的 5.7 但是, 飘 现在
“Time::Piece”(以前称为“Time::Object”)被删除,因为它被认为是
它没有足够的价值成为核心模块。 不过,它仍然是一个有用的模块,
可从 CPAN 获得。
不幸的是,Perl 5.8 不再基于 AmigaOS 构建; 这在某些地方不小心坏了
观点。 由于可用的 Amiga 开发人员不多,我们无法得到这个
在 5.8.0 中及时修复和测试。 Perl 5.6.1 仍然适用于 AmigaOS(就像 5.7.2
开发版本)。
“PerlIO::Scalar”和“PerlIO::Via”(大写)被重命名为“PerlIO::scalar”和
5.8.0 之前的“PerlIO::via”(全部小写)。 主要理由是拥有所有核心
PerlIO 层具有所有小写名称。 “插件”像往常一样命名,例如
“PerlIO::via::QuotedPrint”。
“threads::shared::queue”和“threads::shared::semaphore”被重命名为
5.8.0 之前的“Thread::Queue”和“Thread::Semaphore”。 主要理由是有
线程模块遵循正常命名,“Thread::”(“threads”和“threads::shared”
它们本身更像pragma,它们影响编译时间,所以它们保持小写)。
报告仪表板 错误
如果你发现你认为是一个错误,你可以查看最近发布到
comp.lang.perl.misc 新闻组和 perl 错误数据库位于 http://bugs.perl.org/ 。 那里
也可能是信息在 http://www.perl.com/ ,Perl 主页。
如果您认为有未报告的错误,请运行 错误 程序包含在
你的释放。 确保将您的错误缩减为一个很小但足够的测试用例。 你的错误
报告,连同“perl -V”的输出,将被发送到 [电子邮件保护] 成为
由 Perl 移植团队分析。
使用 onworks.net 服务在线使用 perl58delta