这是命令 perl581delta 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
perl581delta - perl v5.8.1 的新功能
商品描述
本文档描述了 5.8.0 版本和 5.8.1 版本之间的差异。
如果您是从较早的版本(例如 5.6.1)升级,请先阅读 perl58delta,
它描述了 5.6.0 和 5.8.0 之间的差异。
如果您想知道 5.6.1,它是错误修复方面的,与
开发版本 5.7.1。 使困惑? 这个时间线希望能有所帮助:它列出了
新的主要版本、维护版本和开发版本。
新的维护开发
5.6.0 2000 年 22 月 XNUMX 日
5.7.0 2000 年 02 月 XNUMX 日
5.6.1 2001-08-XNUMX
5.7.1 2001-09-XNUMX
5.7.2 2001 年 13 月 XNUMX 日
5.7.3 2002 年 05 月 XNUMX 日
5.8.0 2002 年 18 月 XNUMX 日
5.8.1 2003 年 25 月 XNUMX 日
不相容 更改
哈希 随机化
主要是出于安全原因,散列的“随机排序”已经做了更多
随机的。 以前虽然散列元素的顺序来自 键(), values()和 每个() 是
基本上是随机的,它仍然是可重复的。 但是,现在顺序不同
不同的 Perl 运行。
Perl的 具有 决不要 保证 任何 订购 of 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 哈希 键,并且订单已经
在 Perl 5 的生命周期中多次更改。此外,散列键的顺序
一直并将继续受到插入顺序的影响。
增加的随机性可能会影响应用程序。
一种可能的情况是应用程序的输出包含哈希数据。 为了
例如,如果您使用 Data::Dumper 模块将数据转储到不同的文件中,并且
然后比较文件看数据是否有变化,现在你会得到false
正因为转储散列的顺序会有所不同。 一般来说,治疗是
对键(或值)进行排序; 特别是 Data::Dumper 使用“排序键”
选项。 如果某个特定的顺序真的很重要,请使用绑定的哈希:例如
Tie::IxHash 模块,默认情况下保留散列元素的顺序
补充说。
更微妙的问题是对“全球毁灭”秩序的依赖。 那是什么
在执行结束时发生:Perl 销毁所有数据结构,包括用户数据。
如果您的析构函数(DESTROY 子例程)对
全球毁灭,未来可能会有问题。 例如,在一个析构函数中
你不能假设任何其他类的对象仍然可用,除非你
持有对他们的引用。 如果环境变量 PERL_DESRUCT_LEVEL 设置为
非零值,或者如果 Perl 正在退出一个衍生线程,它也会破坏普通的
不再使用的引用和符号表。 你不能调用类方法
或以这种方式收集的类上的普通函数。
散列随机化肯定会揭示关于某些特定的隐藏假设
散列元素的排序和彻底的错误:它揭示了 Perl 核心中的一些错误和
核心模块。
要在运行时禁用散列随机化,请设置环境变量 PERL_HASH_SEED
在运行 Perl 之前设置为 0(零)(有关更多信息,请参阅 perlrun 中的“PERL_HASH_SEED”),或
要在编译时完全禁用该功能,请使用“-DNO_HASH_SEED”进行编译(请参阅
载点).
有关此背后的原始原理,请参阅 perlsec 中的“算法复杂性攻击”
改变。
UTF-8 On 文件句柄 没有 更长 活性 By 语言环境
在 Perl 5.8.0 中,所有文件句柄,包括标准文件句柄,都被隐式设置为
如果区域设置指示使用 UTF-8,则使用 Unicode UTF-8。 此功能
造成了太多问题,因此该功能被关闭并重新设计:参见“Core
增强”。
单号 v字串 旨在 没有 不再 v字串 before “=>”
版本字符串或 v-strings(参见 perldata 中的“版本字符串”)特性
Perl 5.6.0 引起了一些混乱——尤其是当用户不想
使用它,但 Perl 认为它更清楚。 尤其麻烦的是
在“=>”之前,版本字符串(“v”后跟数字)已被解释为
v-string 而不是字符串文字。 换句话说:
%h = ( v65 => 42 );
从 Perl 5.6.0 开始就意味着
%h = ('A' => 42);
(至少在 ASCII 后代的平台上) Perl 5.8.1 恢复更自然
解释
%h = ('v65' => 42);
像 v65.66 和 65.66.67 这样的多数 v-strings 在 Perl 中仍然是 v-strings
5.8.
(Win32) 这个 -C Switch 开关 有 是 重新用途
-C 开关已以不兼容的方式更改。 仅此开关的旧语义
在 Win32 中有意义,并且仅在 8.x 版本中的“使用 utf5.6”宇宙中有意义,并且不要使
5.8.0 中 Unicode 实现的意义。 由于无法使用此开关
任何人,它已被重新利用。 此开关在 5.6.x 中启用的行为
在未来的版本中,可能会以透明的、依赖于数据的方式支持版本。
有关此开关的新生命,请参阅“UTF-8 不再默认在 UTF-8 语言环境下”,以及
perlrun 中的“-C”。
(Win32) 这个 /d Switch 开关 Of CMD.EXE
Perl 5.8.1 在内部运行 cmd.exe shell 时使用 /d 开关 系统(),
反引号,以及打开管道到外部程序时。 额外的开关禁用
从注册表执行 AutoRun 命令,这通常被认为是不可取的
运行外部程序时。 如果您希望保持与旧版本的兼容性
行为,将您环境中的 PERL5SHELL 设置为“cmd /x/c”。
核心科目 增强
UTF-8 没有 不再 默认 下 UTF-8 当地
在 Perl 5.8.0 中引入了许多 Unicode 特性。 其中之一被发现更多
弊大于利:文件句柄的自动(和无声)“UTF-8 化”,
包括标准文件句柄,如果用户的区域设置指示使用 UTF-8。
例如,如果您将“en_US.UTF-8”作为您的语言环境,则您的 STDIN 和 STDOUT 是
自动“UTF-8”,换句话说,隐式 binmode(..., ":utf8") 被制作。 这
意味着试图打印,比如说, CHR(0xff),最终打印字节 0xc3 0xbf。 几乎不
除非您知道 Perl 5.8.0 的此功能,否则您会想到什么。 问题是
绝大多数人不是:例如在 RedHat 版本 8 和 9 中
默认 区域设置是 UTF-8,所以所有 RedHat 用户都得到 UTF-8 文件句柄,无论他们
想要与否。 Perl 5.8.0 的 Unicode 实现加剧了痛苦
(仍然)有令人讨厌的错误,特别是与 s/// 和 tr// 的使用有关/. (错误,
已在 5.8.1 中修复)
因此决定回溯该功能并将其从隐式静音更改
默认为显式有意识选项。 新的 Perl 命令行选项“-C”及其
对应的环境变量 PERL_UNICODE 现在可用于控制 Perl 和
Unicode 在 I/O 等接口上进行交互,例如命令行参数。 看
perlrun 中的“-C”和 perlrun 中的“PERL_UNICODE”以获取更多信息。
不安全 信号 再次 可使用
在 Perl 5.8.0 中引入了所谓的“安全信号”。 这意味着 Perl 没有
long 立即处理信号,而是“在操作码之间”,在安全的情况下
所以。 较早的立即处理很容易破坏 Perl 的内部状态,
导致神秘的崩溃。
然而,新的更安全的模型也有它的问题。 因为现在一个操作码,一个基本单位
Perl 执行,永远不会被中断,而是让其运行完成,确定
可能需要很长时间的操作现在确实需要很长时间。 例如,某些
网络操作有自己的阻塞和超时机制,并且能够
立即打断他们会很好。
因此 perl 5.8.1 引入了一个“后门”来恢复 pre-5.8.0(pre-5.7.3,真的)
信号行为。 只需将环境变量 PERL_SIGNALS 设置为“不安全”,旧的
立即(和不安全)信号处理行为返回。 查看 perlrun 中的“PERL_SIGNALS”
和 perlipc 中的“延迟信号(安全信号)”。
在完全不相关的新闻中,您现在可以通过 POSIX::SigAction 使用安全信号。 看
POSIX 中的“POSIX::SigAction”。
绑 阵列 - 负 排列 指数
以前,索引在绑定中传递给“FETCH”、“STORE”、“EXISTS”和“DELETE”方法
数组类总是非负的。 如果实际参数是否定的,Perl 会
隐式调用 FETCHSIZE 并将结果添加到索引中,然后再将结果传递给
绑定数组方法。 此行为现在是可选的。 如果绑定数组类包含一个
名为 $NEGATIVE_INDICES 的包变量设置为真值,负值
将不变地传递给“FETCH”、“STORE”、“EXISTS”和“DELETE”。
本地 ${$x}
语法
本地 ${$x}
本地@{$x}
本地 %{$x}
现在做本地化变量,假设 $x 是一个有效的变量名。
统一 字符 数据库 4.0.0
Perl 5.8 中包含的 Unicode 字符数据库副本已更新至 4.0.0
从 3.2.0. 这意味着例如 Unicode 字符属性是
Unicode 4.0.0。
弃用 </p>
有一项新功能已弃用。 Perl 5.8.0 忘记添加一些弃用警告,
现在已添加这些警告。 最后,提醒即将删除的功能。
(提醒) 伪哈希 旨在 弃用 (真的)
Perl 5.8.0 中不推荐使用伪哈希,并将在 Perl 5.10.0 中删除,请参阅
perl58delta 了解详情。 每次尝试访问伪哈希都会触发警告
“不推荐使用伪哈希”。 如果你真的想继续使用伪哈希但是
不想看到弃用警告,请使用:
没有警告“已弃用”;
或者你可以继续使用 fields pragma,但请不要期待数据结构
不再是伪哈希。
(提醒) 的5.005风格 线程 旨在 弃用 (真的)
5.005 风格的线程(由“use Thread;”激活)在 Perl 5.8.0 中被弃用,并将被
Perl 5.8 后移除,详情请参阅 perl58delta。 每个 5.005 风格的线程创建
将触发警告“5.005 个线程已弃用”。 如果你真的想继续
使用 5.005 线程但看不到弃用警告,请使用:
没有警告“已弃用”;
(提醒) 这个 $* 变量 is 弃用 (真的)
$* 变量控制多行匹配已被弃用,将被删除
5.8 之后。 该变量已被弃用很长时间,并发出弃用警告
给出了“不推荐使用 $* ”,现在该变量将最终被删除。 这
功能已被模式匹配上的“/s”和“/m”修饰符取代。 如果
你真的想继续使用 $*-variable 但不想看到弃用警告,
使用:
没有警告“已弃用”;
其他 增强
void 上下文中的“地图”不再昂贵。 “地图”现在是上下文感知的,并且不会
如果在 void 上下文中调用,则构造一个列表。
如果套接字在打印时被服务器关闭,客户端现在会收到一个 SIGPIPE。
虽然这个新特性不是计划中的,但它很自然地脱离了 PerlIO 的变化,并且是为了
被认为是一个偶然的特征。
PerlIO::get_layers(FH) 返回文件句柄上活动的 PerlIO 层的名称。
PerlIO::via 层现在可以有一个可选的 UTF8 方法来指示层是否
想要“自动-:utf8”流。
utf8::is_utf8() 已添加作为测试标量是否已编码的快速方法
内部为 UTF-8 (Unicode)。
科目 和 实用语
更新 科目 和 实用语
自 Perl 5.8.0 起更新了以下模块和 pragmata:
基地
B::字节码
形状比以前好多了。 离完美还很远,但也许值得一试
尝试。
B::简洁
B::解析
基准
可选功能“:hireswallclock”现在允许高分辨率挂钟
次(使用 Time::HiRes)。
字节加载器
参见 B::Bytecode。
字节
现在有 bytes::substr。
CGI
字符
现在可以拥有自定义字符名称别名。
CPAN
现在有一个名为 CPAN.pm 模块的简单命令行前端 盘.
数据::倾销者
新选项 Pair 允许选择散列键和值之间的分隔符。
数据库文件
开发::PPPort
摘要::MD5
编码
编码编译指示功能(tr/// 和 DATA
文件句柄、格式)。
如果文件句柄已被标记为具有编码,则不可映射的字符是
已在输入期间检测到,而不是稍后(使用损坏的数据时)。
ISO 8859-6 转换表已更正(0x30..0x39 错误映射
到 U+0660..U+0669,而不是 U+0030..U+0039)。 GSM 03.38 转换没有
正确处理转义序列。 添加了 UTF-7 编码(使 Encode
功能完整的 Unicode::String)。
领域
库
数学::BigInt
自 v1.60(包含在 Perl v5.8.0 中的版本)以来,已修复了许多错误。
特别值得注意的是 Calc 中的错误导致某些 div 和 mod 失败
大值,以及对错误输入处理的修复。
添加了一些新功能,例如 根() 方法,您现在可以将参数传递给
配置() 在运行时更改一些设置,现在可以捕获
NaN 和无穷大的创建。
像往常一样,进行了一些优化,使整体数学计算速度更快。 在
在某些情况下,实际上要快得多。 特别是替代库,如
Math::BigInt::GMP 受益于此。 另外,很多相当笨重的套路
喜欢 fsqrt() 和 鞭打() 现在要快得多。
MIME::Base64 格式
下一页
钻石继承现在有效。
网络::平
PerlIO::标量
从非字符串标量(如特殊变量,参见 perlvar)读取现在可以工作了。
播客
豆荚::乳胶
PodParser
Pod::Perldoc
完全重写。 作为副作用,在以 root 运行时不再拒绝启动。
标量::实用程序
新实用程序:refaddr、isvstring、look_like_number、set_prototype。
可储存
现在可以存储代码引用(通过 B::Deparse,所以不是万无一失的)。
严格
早期版本的严格编译指示没有检查隐式传递的参数
到它的“导入”(使用)和“取消导入”(不)例程。 这导致了这样的错误习语
如:
使用严格的 qw(@ISA);
@ISA = qw(富);
然而,这(可能)引发了错误的期望,即严格的 refs、vars 和
subs 正在被强制执行(并且@ISA 以某种方式被“声明”)。 但严格的裁判,
vars 和 subs 是 而不去 使用此错误习语时强制执行。
从 Perl 5.8.1 开始,上面的 将 导致引发错误。 这可能会导致
过去看似正确执行而没有警告和错误的程序会失败
在 5.8.1 下运行时。 发生这种情况是因为
使用严格的 qw(@ISA);
现在将失败并显示错误:
未知的“严格”标签“@ISA”
解决这个问题的方法是用正确的习语替换这段代码:
用严格;
使用 vars qw(@ISA);
@ISA = qw(富);
术语::ANSI颜色
测试::线束
现在对来自测试脚本的额外或丢失的输出更加挑剔。
测试::更多
测试::简单
文字::平衡
时间::高分辨率
用于 纳米睡眠(),如果可用,允许将亚秒级睡眠与警报混合。
线程
几个修复,例如 加入() 问题和内存泄漏。 在一些平台
(如 Linux)使用 glibc 的一个 ithread 的最小内存占用已经
减少了数百 KB。
线程::共享
许多内存泄漏已得到修复。
Unicode::整理
Unicode::标准化
Win32::获取文件夹路径
Win32::获取操作系统版本
现在返回额外的信息。
公用事业 更改
“h2xs”实用程序现在可以生成更现代的布局: Foo-Bar/lib/Foo/Bar.pm 而不是
Foo/Bar/Bar.pm. 此外,样板测试现在被称为 t/Foo-Bar.t 而不是 吨/1.t.
Perl 调试器 (库/perl5db.pl) 现在已被广泛记录并发现错误
同时记录已修复。
“perldoc”已经从头开始重写,使其更加健壮和功能丰富。
“perlcc -B”现在至少工作得更好一些,而“perlcc -c”则更糟糕。
(Perl 编译器套件作为一个整体仍然是实验性的。)
新建 文件记录
已添加 perl573delta 以列出(现在已过时)之间的差异
开发版本 5.7.2 和 5.7.3。
增加了perl58delta:是5.8.0的perldelta,详细说明区别
在5.6.0和5.8.0之间。
已添加 perlartistic:它是 pod 格式的艺术许可证,使其更容易
供模块参考。
已添加 perlcheat:它是一个 Perl 备忘单。
已添加 perlgpl:它是 pod 格式的 GNU 通用公共许可证,使其成为
模块更容易引用它。
已添加 perlmacosx 来讲述 Perl 在 Mac OS X 中的安装和使用。
已添加 perlos400 来讲述 Perl 在 OS/400 PASE 中的安装和使用。
已添加 perlreref:它是一个正则表达式快速参考。
安装 和 配置 建设
Unix 标准 Perl 位置, /usr/bin/perl, 默认情况下不再被覆盖,如果它
存在。 这种变化是非常谨慎的,因为很多 Unix 供应商已经提供了一个
/usr/bin/perl,但同时许多系统实用程序可能依赖于该确切版本
Perl,所以最好不要覆盖它。
现在可以为站点和供应商手册和 HTML 页面指定安装目录,并且
站点和供应商脚本。 看 载点.
现在可以通过指定 Perl 安装的目标目录
“make install”的DESTDIR变量。 (此功能与
以前的“配置 -Dinstallprefix=...”。)见 载点.
gcc 版本 3.x 引入了一个新警告,该警告在 Perl 期间引起了大量噪音
编译:“gcc -Ialreadyknowndirectory(警告:更改搜索顺序)”。 这个警告
现在已通过在编译之前配置清除此类目录来避免。
现在可以使用配置标志构建 Perl 核心模块的子集
“-Dnoextensions=...”和“-Donlyextensions=...”,见 载点.
特定于平台 增强
在 Cygwin Perl 现在可以用线程构建(“Configure -Duseithreads”)。 这适用于
Cygwin 1.3.22 和 Cygwin 1.5.3。
在较新的 FreeBSD 版本中,由于尝试使用 Perl 5.8.0 编译失败 malloc文件,
它在 FreeBSD 中只是一个虚拟文件,甚至尝试使用也是一个致命错误。 现在 malloc文件
未使用。
现在已知 Perl 也可以在 Hitachi HI-UXMPP 中构建。
现在已知 Perl 会在 LynxOS 中再次构建。
Mac OS X 现在安装时在安装目录名称中嵌入 Perl 版本号
更容易升级用户编译的 Perl,以及一般的安装目录
更标准。 换句话说,默认安装不再破坏 Apple-
提供 Perl。 另一方面,使用“配置 -Dprefix=在/ usr“你现在真的可以
替换 Apple 提供的 Perl (请 be 小心).
Mac OS X 现在默认静态构建 Perl。 进行此更改主要是为了更快
启动次数。 Apple 提供的 Perl 仍然是动态链接和共享的,你
可以通过“配置 -Duseshrplib”为您自己的 Perl 构建启用共享。
Perl 已被移植到 IBM 的 OS/400 PASE 环境中。 构建 Perl 的最佳方式
PASE 是使用 AIX 主机作为交叉编译环境。 请参阅 README.os400。
添加了另一个交叉编译选项:现在 Perl 构建在 OpenZaurus 上,一个
基于 Mandrake + Embedix 的 Linux 发行版,用于 Sharp Zaurus PDA。 见
交叉/自述文件。
Tru64 使用 gcc 3 时放弃优化 令牌 到“-O2”,因为巨大
内存使用默认为“-O3”。
Tru64 现在可以使用较新的 Berkeley DB 构建 Perl。
在 WinCE 上构建 Perl 已大大增强,请参阅 自述文件 和 自述文件.
选 问题 修复
关闭, 评估 和 词汇
在匿名 subs、词法和闭包方面有许多修复。 虽然
这意味着 Perl 现在更“正确”,一些现有的代码可能会
中断恰好依赖于错误的行为。 在实践中这是不可能的,除非
您的代码包含非常复杂的匿名 subs、evals 和 lexicals 嵌套。
通用 固定
如果输入文件句柄被标记为 ":utf8" 并且 Perl 在执行时看到非法的 UTF-8
” ", 如果启用警告,则会立即发出警告 - 而不是保持沉默
Perl 对后来损坏的数据感到不满。 (":encoding(utf8)" 层
也以同样的方式工作。)
binmode(SOCKET, ":utf8") 仅适用于输入端,而不适用于输出端
插座。 现在它可以双向工作。
对于线程 Perls 某些系统数据库功能,如 获取() 和 getgrent() 现在
动态增长他们的结果缓冲区,而不是失败。 这意味着在具有
许多用户和组的功能不再因仅返回部分结果而失败。
Perl 5.8.0 意外地破坏了用户定义自己的能力
大写<->小写 Unicode 映射(如 Camel 所宣传的)。 此功能有
已修复,并且记录得更好。
在 5.8.0 这个
$some_unicode .= ;
没有正常工作,而是损坏了数据。 现在已经解决了这个问题。
诸如 FETCH 等绑定方法现在可以安全地访问绑定值,即导致
对 FETCH 等的递归调用。不过,请记住打破递归。
在启动时 Perl 会阻止 SIGFPE 信号,因为 Perl 对此无能为力。
以前这种阻塞对从 Perl 内执行的程序也有效。 现在
Perl 在运行之前恢复原始的 SIGFPE 处理例程,无论它是什么
外部程序。
Perl 脚本中的行号现在可能大于 65536 或 2**16。 (Perl 脚本有
总是能够大于那个,只是报告错误的行号
和警告已经“环绕”。)虽然大的脚本通常表明需要
重新考虑你的代码,这样的 Perl 脚本确实存在,例如作为生成的结果
代码。 现在行号可以一直到 4294967296 或 2**32。
特定于平台 固定
Linux
· 设置 $0 再次起作用(有一些 Perl 不能做的限制:见
perlvar 中的“$0”)
HP-UX
· 设置 $0 现在有效。
VMS
· 配置现在测试“poll()”的存在,并且 IO::Poll 现在使用
如果检测到供应商提供的功能。
· 如果安装了 Perl 映像,可能会在 Perl 启动时发生罕见的访问冲突
具有特权,或者是否存在具有子系统属性的标识符
进程的权限列表。 这两种情况中的任何一种都会触发污染代码
包含一个指针错误。 错误的指针算法已得到修复。
· %ENV 散列中的值(不是键)的长度限制已从 255 字节提高
到 32640 字节(除非 PERL_ENV_TABLES 设置覆盖默认使用
%ENV 的逻辑名称)。 如果需要从外部访问这些长值
Perl,请注意它们是使用存储的搜索列表逻辑名称实现的
分片的值,每个 255 字节的片断(最多 128 个)是
搜索列表。 在 Perl 中在 %ENV 中进行查找时,元素被组合在一起
变成一个单一的值。 现有 VMS 特定的访问单个元素的能力
通过 $ENV{'foo;N'} 语法(其中 N 是搜索列表
指数)未受损。
· 管道实现现在使用本地而不是全局 DCL 符号来进行交互。
进程通信。
· File::Find 在导航到其名称的相对目录时可能会变得混乱
与逻辑名称相冲突。 已通过添加目录更正此问题
相对路径名的语法,从而防止逻辑名称转换。
Win32
·内存泄漏 叉子() 仿真已修复。
· 返回值 读写控制() 内置函数在 5.8.0 中意外损坏。
这已得到纠正。
· perl 有时在阻塞操作时执行的内部消息循环
干扰了 Perl 外部的消息。 这经常导致阻塞
操作过早终止或返回不正确的结果,当 Perl
在可能生成 Windows 消息的环境下执行。 这已经
纠正。
· 管道和套接字现在自动处于二进制模式。
· 四参数形式 选择() 没有保留 $! (errno) 正确时
是底层调用中的错误。 现在已修复。
· 已修复“CR CR LF”问题,binmode(FH, ":crlf") 现在有效地
无操作。
新建 or 更改 诊断
所有相关的警告 盒() 和 解包() 变得更加翔实和一致。
更改 "A 绪 退出 而 %d 线程 为 跑步”
旧版本
一个线程退出,而 %d 个其他线程仍在运行
具有误导性,因为“其他”还包括发出警告的线程。
去除 “试图 至 清除 a 受限 哈希”
清除受限散列并不违法,因此删除了警告。
新建 “非法的 声明 of 匿名 子程序"
您必须为“sub”指定代码块。
更改 “无效的 范围 “%s” in 音译 操作员”
旧版本
音译运算符中的 [] 范围“%s”无效
完全错误,因为 tr// 中没有“[] 范围”/.
新建 “失踪 控制 坦克 姓名 in \C”
不言自明。
新建 “新队 in 左对齐 绳子 HPMC胶囊 %s”
填充空格会出现在换行符之后,这可能不是你所拥有的
心神。
新建 “可能的 优先权 问题 on 按位 %c 操作员”
如果你认为这
$x & $y == 0
测试 $x 和 $y 的按位 AND 是否为零,您会喜欢这个警告。
新建 “伪哈希 旨在 已弃用”
这个警告应该已经在 5.8.0 中了,因为它们是。
新建 "读() on %s 文件句柄 %s”
你不能 读() (或 系统读取()) 来自已关闭或未打开的文件句柄。
新建 “5.005 线程 旨在 已弃用”
这个警告应该已经在 5.8.0 中了,因为它们是。
新建 “绑 变量 释放 而 仍然 in 利用”
有些东西拔掉了一个实时绑定变量的插头,Perl 通过跳出来保持安全。
新建 “致%s: 非法 制图 “%s”
指定了非法的用户定义的 Unicode 案例映射。
新建 “用 of 释放 折扣值 in 迭代”
有些东西修改了被迭代的值。 情况不妙。
更改 内幕
只有当您编写 XS 代码或喜欢了解或破解这些新闻时,这些新闻才对您很重要
Perl 内部(使用 Devel::Peek 或任何“B::”模块计数),或者喜欢运行 Perl
使用“-D”选项。
perlembed 的嵌入示例已被审查为最新且一致:
例如,正确使用 PERL_SYS_INIT3() 和 PERL_SYS_TERM().
对填充代码(负责词法变量的代码)进行了大量修改
由戴夫·米切尔指挥。
约翰·皮科克 (John Peacock) 对 V 弦的广泛研究。
UTF-8 长度和位置缓存:加速处理 Unicode (UTF-8) 标量,一个
缓存被引入。 如果扩展绕过官方 API,则存在潜在问题
并直接修改 SV 的 PV:UTF-8 缓存不会像它应该的那样被清除。
在 Perl 5.8.0 中过时的 API,如 sv_2pv、sv_catpvn、sv_catsv、sv_setsv,再次出现
可用。
某些 Perl 核心 C API,如 cxinc 和 regatom 根本不再可用于编码
Perl 核心扩展之外的 Perl 核心。 这是故意的。 他们从不
应该可以使用较短的名称,如果您的应用程序依赖于它们,
您应该(感到羞耻)联系 perl5-porters 讨论什么是正确的 API。
如果没有“Perl_”,某些 Perl 核心 C API(如“Perl_list”)将不再可用
字首。 如果您的 XS 模块因为找不到某些功能而停止工作,在许多
在这种情况下,一个简单的解决方法是在函数和线程上下文中添加“Perl_”前缀
“aTHX_”作为函数调用的第一个参数。 这也是它应该始终的方式
已经完成:让 Perl_less 表单从核心泄漏是一个意外。 为了
更干净的嵌入您还可以通过在编译时定义 cpp 来强制所有 API
定义 PERL_NO_SHORT_NAMES。
Perl_save_bool() 已添加。
正则表达式对象(那些用“qr”创建的对象)现在具有 S-magic 而不是 R-magic。 这个固定
/...(??{...;$x})/ 形式的正则表达式不再忽略对 $x 所做的更改。 S-魔术
避免放弃缓存优化并使 (??{...}) 构造变得异常缓慢
(因此无用)。 另请参阅 perlguts 中的“魔术变量”。 正则表达式::复制是
受这一变化的影响。
Perl 内部调试宏 调试() 和 DEB() 已更名为 PERL_DEBUG() 和
PERL_DEB() 以避免命名空间冲突。
删除了“-DL”(泄漏测试已损坏且多年来不受支持,请使用替代方案
调试 malloc 或诸如 valgrind 和 Purify 之类的工具)。
为“-DXv”和“-Dsv”添加了详细修饰符“v”,请参阅 perlrun。
新建 检测
在 Perl 5.8.0 中,大约 69000 个测试文件中有大约 700 个单独的测试,在 Perl 5.8.1 中
大约 77000 个测试文件中有大约 780 个单独的测试。 具体数字取决于
Perl 配置和操作系统平台上。
已知的 问题
“不兼容的更改”中提到的哈希随机化肯定是有问题的:它
将唤醒休眠的错误并摆脱错误的假设。
如果您想在 Perl 2 中使用 mod_perl 5.8.1.x,您将需要 mod_perl-1.99_10 或更高版本。
早期版本的 mod_perl 2.x 不适用于随机散列。 (mod_perl 1.x
工作正常。)您还需要 Apache::Test 1.04 或更高版本。
许多使用 perl 100 工作 5.8.0% 或非常接近它的稀有平台都有
由于他们的维护人员最近很忙,所以有点无人看管,
因此在这些平台上会有更多的失败。 此类平台包括 Mac
OS Classic、IBM z/OS(和其他 EBCDIC 平台)和 NetWare。 最常见的 Perl
平台(Unix 和类 Unix、Microsoft 平台和 VMS)有足够大的测试和
专家们表示,他们做得很好。
绑 哈希 in 纯量 上下文
绑定散列当前不返回任何在标量上下文中有用的东西,例如当
用作布尔测试:
如果 (%tied_hash) { ... }
当前的荒谬行为总是返回 false,无论是否
hash 为空或有元素。
根本原因是绑定哈希的实现者没有接口
在标量上下文中实现散列的行为。
网络::平 450_服务 和 510_ping_udp 失败
lib/Net/Ping/t/9_service.t的子测试18和450,以及子测试2
如果您的网络设置异常,lib/Net/Ping/t/510_ping_udp.t 可能会失败。 为了
例如,在后一种情况下,测试试图向 IP 地址发送 UDP ping
127.0.0.1.
公元前
生成 C 的编译器后端 B::C(前端为“perlcc -c”)甚至更多
由于广泛的词汇变量变化,它比以前更糟糕了。 (好
新闻是 B::Bytecode 和 ByteLoader 比以前更好。)
平台 获得每个 问题
EBCDIC 交易平台
IBM z/OS 和其他 EBCDIC 平台在 Unicode 支持方面仍然存在问题。
许多 Unicode 测试在真正应该修复时被跳过。
Cygwin的 1.5 问题
在 Cygwin 1.5 中 io/告诉 和 操作/系统 由于某些未知原因,测试失败。
在 1.5.5 中,线程测试 stress_cv、stress_re 和 stress_string 失败,除非
环境变量 PERLIO 设置为“perlio”(这也使 io/tell 失败
离开)。
Perl 5.8.1 在 Cygwin 1.3 中构建并运行良好:使用 (uname -a) "CYGWIN_NT-5.0 ...
1.3.22(0.78/3/2) 2003-03-18 09:20 i686 ..." 100% "make test" 是通过
“配置 -des -Duseithreads”。
HP-UX: HP cc 警告 关于 发送文件 和 发送路径
对于某些 HP C 编译器版本(例如 B.11.11.02),您将收到许多这样的警告
(换行以便于阅读):
抄送:“/usr/include/sys/socket.h”,第 504 行:警告 562:
使用不同的存储类说明符重新声明“sendfile”:
“sendfile”将具有内部链接。
抄送:“/usr/include/sys/socket.h”,第 505 行:警告 562:
使用不同的存储类说明符重新声明“sendpath”:
“发送路径”将具有内部链接。
在 Perl 构建期间和某些 lib/ExtUtils 测试期间都会出现警告
调用 C 编译器。 但是,警告并不严重,可以忽略。
爱丽丝: t/uni/tr_7jis.t 假 失败
已知测试 t/uni/tr_7jis.t 在“make test”或测试工具下报告失败
某些版本的 IRIX(至少 IRIX 6.5 和 MIPSpro 编译器版本 7.3.1.1m),
但如果手动运行测试完全通过。
Mac OS X: 没有 使用mymalloc
Perl malloc(“-Dusemymalloc”)在 Mac OS X 中根本不起作用。这不是
不过,这很严重,因为本机 malloc 工作得很好。
Tru64: 没有 螺纹的 建立 - GNU cc (海湾合作委员会)
在最新的 Tru64 版本(例如 v5.1B 或更高版本)中,gcc 不能用于编译
线程化 Perl (-Duseithreads) 因为系统“ " 文件不知道
海湾合作委员会。
Win32: 系统打开, 系统读取, 系统写入
从 5.8.0 版本开始, 系统打开()/系统读取()/系统写入() 不要表现得像过去那样
5.6.1 及更早版本关于“文本”模式。 这些内置插件现在总是在
“二进制”模式(即使 系统打开() 已通过 O_TEXT 标志,或者如果 二进制模式() 被用于
文件句柄)。 请注意,此问题只会对磁盘文件产生影响,因为
套接字和管道在 Windows 端口中一直处于“二进制”模式。 由于这种行为
目前被认为是一个错误,未来可能会重新引入兼容行为
发布。 在此之前,使用 系统打开(), 系统读取() 和 系统写入() 不支持
“文本”模式操作。
未来 使用方法
以下几点 可能 将来发生。 第一个公开发布的版本具有
这些特性将在开发者发布 Perl 5.9.x 时,在 Perl 中达到高潮
5.10.0 版本。 这些是我们目前最好的猜测:我们保留
重新思考。
· PerlIO 将成为默认值。 目前(在 Perl 5.8.x 中)stdio 库仍然是
如果 Perl 认为它可以使用某些技巧来使 stdio 运行,则使用 真 快速地。 为了
未来的版本我们的目标是让 PerlIO 运行得更快。
· 一项名为 断言 将可用。 这意味着一个人可以拥有代码
被称为散布在代码中的断言:通常它们被优化掉了,但它们可以
使用“-A”选项启用。
· 一个新的运算符“//”(定义或)将可用。 这意味着人们将能够
说
$a // $b
而不是
定义 $a ? $a : $b
和
$c //= $d;
而不是
$c = $d 除非定义 $c;
运算符将具有与“||”相同的优先级和结合性。 一个源代码
针对 Perl 5.8.1 源的补丁将在 CPAN 中可用
作者/id/H/HM/HMBRAND/dor-5.8.1.diff.
· "unpack()" 将默认解压 $_。
· 将研究各种写时复制技术,以期加快 Perl。
· CPANPLUS、Inline 和 Module::Build 将成为核心模块。
· 将介绍编写真正的词法作用域 pragma 的能力。
· 字节编译器和字节加载器的工作将继续进行。
· 当前存在的 v-strings 计划弃用。 v-less 形式
(1.2.3) 与“use”、“require”和 $VERSION 一起使用时将成为“版本对象”。
$^V 也将是一个“版本对象”,因此 printf("%vd",...) 构造将不再
被需要。 v-ful 版本 (v1.2.3) 将过时。 的等价
字符串和 v 字符串(例如,当前 5.8.0 等于 "\5\8\0")将消失。
那里 五月 be 没有 弃用 警告 HPMC胶囊 v字串,虽然:很难检测到
何时安全使用 v 字符串,何时不安全使用。
· 5.005 线程将被删除
· $* 变量将被删除(很久以前就被弃用了)
· 伪哈希将被删除
报告仪表板 错误
如果你发现你认为是一个错误,你可以查看最近发布到
comp.lang.perl.misc 新闻组和 perl 错误数据库位于 http://bugs.perl.org/ 。 那里
也可能是信息在 http://www.perl.com/ ,Perl 主页。
如果您认为有未报告的错误,请运行 错误 程序包含在
你的释放。 确保将您的错误缩减为一个很小但足够的测试用例。 你的错误
报告,连同“perl -V”的输出,将被发送到 [email protected] 成为
由 Perl 移植团队分析。 您可以在以下位置浏览和搜索 Perl 5 错误
http://bugs.perl.org/
使用 onworks.net 服务在线使用 perl581delta