这是命令 perl5120delta 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
perl5120delta - perl v5.12.0 的新功能
商品描述
本文档描述了 5.10.0 版本和 5.12.0 版本之间的差异。
5.12.0 中的许多错误修复已包含在 5.10.1 维护版本中。
您可以在 5.10.1 发行说明 (perl5101delta) 中查看这些更改的列表。
核心科目 增强
新建 “包裹 您的姓名 版本” 句法
这种新语法允许模块作者在以下情况下设置命名空间的 $VERSION
命名空间是用“包”声明的。 它消除了对“我们的 $VERSION = ...”的需要,并且
类似的构造。 例如
包 Foo::Bar 1.23;
# $Foo::Bar::版本 == 1.23
这样做有几个优点:
· $VERSION 的解析方式与“use NAME VERSION”完全相同
· $VERSION 在编译时设置
· $VERSION 是一个版本对象,提供比较运算符的适当重载
因此将 $VERSION 与十进制 (1.23) 或点分十进制 (v1.2.3) 版本号进行比较
工作正常。
· 消除了“$VERSION = ...”和“eval $VERSION”的混乱
· 因为它要求 VERSION 是数字文字或 v-string 文字,所以它可以是
由工具链模块静态解析,而不像 MM->parse_version 那样“评估”
对于“$VERSION = ...”
它不会仅使用“package NAME”破坏旧代码,而是使用“package NAME”的代码
VERSION" 将需要限制为 perl 5.12.0 或更新版本 这类似于
将“打开”从两个参数更改为三个参数。 需要最新 Perl 的用户将
受益,也许几年后,它会成为一种标准做法。
但是,“package NAME VERSION”需要一种新的“严格”版本号格式。 看
“版本号格式”了解详情。
这个 “......” 操作者
添加了一个新的运算符“...”,绰号为 Yada Yada 运算符。 它的目的是
标记尚未实现的占位符代码。 参见 perlop 中的“Yada Yada Operator”。
隐含的 狭窄
使用版本号大于或等于 5.11.0 的“use VERSION”语法将
像“use strict”那样在词法上启用限制(除了启用
功能。)以下内容:
使用 5.12.0;
手段:
用严格;
使用功能':5.12';
统一 改善
Perl 5.12 带有 Unicode 5.2,这是我们当时可用的最新版本
发布。 此版本的 Unicode 于 2009 年 XNUMX 月发布。请参阅
<http://www.unicode.org/versions/Unicode5.2.0> 有关更改的更多详细信息
这个版本的标准。 有关安装和使用的说明,请参阅 perlunicode
其他版本的 Unicode。
此外,Perl 的开发人员显着改进了 Perl 的 Unicode 实现。
有关完整详细信息,请参阅下面的“Unicode 大修”。
2038 符合
Perl 的核心时间相关函数现在符合 Y2038。 (这对你来说可能意义不大,
但你的孩子会喜欢的!)
qr 超载
现在可以重载“qr//”操作符,也就是转换成regexp,喜欢
已经可以重载转换为布尔值、字符串或对象数量。 它是
当对象出现在“=~”运算符的右侧或当它出现在
插入到正则表达式中。 参见过载。
可插拔 关键词
扩展模块现在可以干净地挂接到 Perl 解析器来定义新的类型
关键字为首的表达式和复合语句。 关键字后面的语法是
完全由扩展定义。 这允许完全非 Perl 的子语言
内联解析,干净地生成正确的操作。
有关机制,请参阅 perlapi 中的“PL_keyword_plugin”。 Perl 核心源代码分发
还包括一个新模块 XS::APItest::KeywordRPN,它实现了反向波兰语
通过可插入关键字进行符号运算。 该模块主要用于测试目的,
并且不正常安装,但也作为如何使用新的示例
机制。
Perl 的开发人员认为这个特性是实验性的。 我们可能会删除或更改它
在 Perl 5.14 中以一种向后不兼容的方式。
APIs HPMC胶囊 更多 内部
词法分析器的最低层和打击垫系统的部分现在具有可用于 XS 的 C API
扩展名。 这些是支持正确使用可插入关键字所必需的,但是
还有其他用途。 新的 API 是实验性的,只涵盖了一小部分
有必要充分利用核心在这些领域的设施。 它是
打算在 Perl 5.13 开发周期中看到添加全系列的
干净,受支持的界面。
Perl 的开发人员认为这个特性是实验性的。 我们可能会删除或更改它
在 Perl 5.14 中以一种向后不兼容的方式。
可覆盖 function 查找
其中扩展模块挂钩 rv2cv ops 的创建以修改子例程查找
过程,这现在可以正常用于裸字子例程调用。 这意味着
以这种方式引用的子程序上的原型将被正确处理。 (之前
裸字子程序名称最初是由一个不可挂接的人查找,用于解析目的
机制,所以扩展只能正确地影响出现的子程序名称
一个“&”符号。)
A 正确 接口 HPMC胶囊 可插拔 付款方式 分辨率 订单管理
从 Perl 5.12.0 开始,有一个用于插入和使用方法解析命令的新接口
除了默认的线性深度优先搜索。 中添加的 C3 方法解析顺序
5.10.0 已经作为插件重新实现,没有改变它的 Perl 空间接口。 看
perlmroapi 了解更多信息。
"\N" 试验 正则表达式 逃生
Perl 现在支持“\N”,这是一种新的正则表达式转义符,您可以将其视为“\n”的反义词。
它将匹配任何不是换行符的字符,独立于存在或
缺少单行匹配修饰符“/s”。 它在字符类中不可用。
"\N{3}" 表示匹配3个非换行符; "\N{5,}" 表示匹配至少 5 个。 "\N{NAME}"
仍然表示名为“NAME”的字符或序列,但“NAME”不再是事物
如 3 或“5”。
这将破坏允许字符名称数字的自定义字符名翻译器,如
"\N{3}" 现在意味着匹配 3 个非换行符,而不是名称的字符
是 3。(Unicode 标准定义的名字没有一个是数字,所以只有自定义翻译器
可能会受到影响。)
Perl 的开发人员有点担心用户可能会混淆现有的
"\N{...}" 构造它通过它们的 Unicode 名称匹配字符。 因此,这
功能是实验性的。 我们可能会删除它或以向后不兼容的方式更改它
Perl 5.14。
跟踪 支持
Perl 现在有一些对 DTrace 的支持。 请参阅“DTrace 支持” 载点.
支持 HPMC胶囊 “配置要求” in CPAN 模块 元数据
“CPAN”和“CPANPLUS”现在都支持“configure_requires”关键字 元文件
包含在最新 CPAN 发行版中的元数据文件。 这允许分发
作者指定运行前必须安装的配置先决条件
生成文件 or 构建.PL.
有关如何使用“ExtUtils::MakeMaker”或“Module::Build”的更多信息,请参阅文档
在为 CPAN 创建分发时指定“configure_requires”。
“每个”, "钥匙", “价值观” 旨在 现在 更多 柔软
“each”、“keys”、“values”函数现在可以对数组进行操作。
“什么时候” as a 声明 变化
现在允许将“when”用作语句修饰符。
$, 灵活性
变量 $, 现在可以绑定。
// in ,尤其是 条款
// 现在的行为就像 || 在 when 子句中
启用 警告 , 您的 壳 环境
您现在可以从“PERL5OPT”环境变量中设置“-W”
“删除 当地的”
“删除本地”现在允许您在本地删除哈希条目。
新建 支持 HPMC胶囊 抽象 命名空间 插座
抽象命名空间套接字是存在于 AF_UNIX 系列中的 Linux 特定套接字类型,
稍微滥用它以能够使用任意字符数组作为地址:它们开始
使用 nul 字节并且不以 nul 字节终止,而是将长度传递给
插座() 系统调用。
32 bit 限制 on 子字符串 参数 去除
“substr”参数的 32 位限制现已删除。 全系列的
系统的有符号和无符号整数现在可用于“pos”和“len”参数。
潜在 不相容 更改
弃用 警告 by 默认
多年来,Perl 的开发人员已经弃用了许多语言功能
各种原因。 Perl 现在默认在不推荐使用的语言时发出警告
特征被使用。 Perl 现在警告您的许多弃用已被弃用
很多年了。 您可以在给定的 Perl 版本中找到已弃用的列表
该版本的“perl5xxdelta.pod”文件。
要在给定的词法范围内禁用此功能,您应该使用“no warnings
'deprecated';" 有关不推荐使用的语言功能的信息以及
各种弃用警告的解释,请参阅 perldiag。 见“弃用”
下面是 Perl 开发人员已弃用的功能和模块列表
这个版本。
版本 数 格式
可接受的版本号格式已正式化为“严格”和“宽松”规则。
“包名称版本”采用严格的版本号。 “通用::版本”和
版本对象构造函数采用宽松的版本号。 提供无效版本将
导致致命错误。 “use NAME VERSION”中的版本参数首先被解析为
数字文字或 v 字符串,然后传递给“UNIVERSAL::VERSION”(然后必须传递
“宽松”格式测试)。
这些格式在版本模块中有完整的文档。 一阶近似,a
“严格”版本号是一个正十进制数(整数或小数部分),没有
取幂或者一个带前导 'v' 字符的点分十进制 v 字符串,并且至少
三个组成部分。 “宽松”版本号允许 v 字符串少于三个组件
或没有前导“v”。 在“宽松”规则下,十进制和点分十进制版本都可以
有一个尾随的“alpha”组件,在小数部分后用下划线字符分隔
或点分十进制分量。
版本模块添加了“version::is_strict”和“version::is_lax”函数来检查
违反这些规则的标量。
@INC 重组
在@INC 中,“ARCHLIB”和“PRIVLIB”现在出现在当前版本的“site_perl”和
“供应商_perl”。 安装到“site_perl”和“vendor_perl”中的模块现在将被加载到
优先于安装在“ARCHLIB”和“PRIVLIB”中的那些。
正则表达式 旨在 现在 第一 程
在内部,Perl 现在处理编译的正则表达式(例如那些用
"qr//") 作为第一类实体。 序列化、反序列化或其他方式的 Perl 模块
与 Perl 的内部数据结构有深度交互需要为此更新
改变。 在撰写本文时,大多数受影响的 CPAN 模块已经更新。
Switch 开关 声明 变化
"given"/"when" switch 语句比 Perl 5.10.0 更好地处理复杂语句
(这些增强功能也在 5.10.1 和后续 5.10 版本中可用。)有
两种新情况,其中“when”现在将其参数解释为布尔值,而不是
要在智能匹配中使用的表达式:
触发器运算符
“..”和“...”触发器运算符现在在布尔上下文中进行评估,如下
他们通常的语义; 请参阅 perlop 中的“范围运算符”。
请注意,在 perl 5.10.0 中,“when (1..10)”将无法测试给定的
value 是 1 到 10 之间的整数; 你应该使用“when ([1..10])”来代替(注意
数组引用)。
然而,与 5.10.0 相反,在布尔上下文中评估触发器运算符
确保它现在可以在“when()”中有用,特别是用于实现双稳态
条件,例如:
当 (/^=begin/ .. /^=end/) {
# 做点什么
}
定义或运算符
涉及定义或运算符的复合表达式,如“when (expr1 //
expr2)",如果第一个表达式是布尔值,将被视为布尔值。(这只是
扩展适用于正则或运算符的现有规则,如“when (expr1
|| expr2)”。)
智能 匹配 变化
自 Perl 5.10.0 以来,Perl 的开发人员对智能匹配进行了许多更改
操作员。 当然,这些也改变了 switch 语句的行为,其中 smart
隐式使用匹配。 这些更改也适用于 5.10.1 版本,并且
将保留在后续 5.10 版本中。
更改 至 基于类型 派遣
智能匹配运算符“~~”不再是可交换的。 现在智能匹配的行为
主要取决于其右手参数的类型。 而且,它的语义有
在一些情况下进行了调整以获得更大的一致性或实用性。 虽然一般
保持向后兼容性,必须注意几个变化:
· 带有空原型的代码引用不再被特殊对待。 他们是
像其他代码引用一样传递参数(即使他们选择忽略它)。
· "%hash ~~ sub {}" 和 "@array ~~ sub {}" 现在测试子程序返回真
散列的每个键(或数组的元素)的值,而不是传递整个
散列或数组作为对子程序的引用。
· 由于可交换性破坏,不再对代码引用进行特殊处理
当出现在“~~”运算符的左侧时,但就像任何粗俗的标量一样。
· "undef ~~ %hash" 总是假的(因为 "undef" 不能是散列中的一个键)。 无隐含
转换为 "" 已完成(如 perl 5.10.0 中的情况)。
· "$scalar ~~ @array" 现在总是在元素之间分配智能匹配
大批。 如果@array 中的一个元素验证“$scalar ~~ $element”,则为真。 这是一个
测试数组是否包含
标量。
智能匹配算子的完整调度表在“智能匹配
细节”在 perlsyn。
智能 匹配 和 超载
根据基于最右边参数类型的调度规则,当一个对象
运算符右侧出现重载“~~”,重载例程将
总是被调用(将第三个参数设置为真值,请参阅重载。)但是,当
对象会出现在左边,重载例程只有在
最右边的参数是一个简单的标量。 这样,智能匹配的分布性
数组没有被破坏,以及其他复杂类型的行为(coderefs,
哈希、正则表达式)。 因此,智能匹配重载例程的编写者大多需要
只担心与标量进行比较,可能还有字符串化重载;
其他常见情况将自动统一处理。
“~~”现在将拒绝处理没有重载它的对象(为了避免依赖
在对象的底层结构上)。 (但是,如果对象重载
字符串化或数字化运算符,如果重载回退处于活动状态,它将
照常使用。)
其他 可能 不相容 变化
· 许多 Unicode 属性的定义已更改以匹配
当前的 Unicode 标准。 这些在上面的“Unicode 大修”下列出。 这个变化
可能会破坏需要旧定义的代码。
· boolkeys 操作已移至散列操作组。 这破坏了二进制兼容性。
· 文件句柄现在总是被祝福为“IO::File”。
之前的行为是将 Filehandles 加持为 FileHandle(一个空的代理类)
如果它被加载到内存中,否则将它们祝福到“IO::Handle”中。
· "use feature :5.10*" 的语义略有变化。 请参阅“模块和
Pragmata”了解更多信息。
· Perl 的开发人员现在使用 git,而不是 Perforce。 这应该是一个纯粹的内部
改变只与积极致力于核心的人有关。 然而,你可能会看到
由于更改,perl 的细微差别。 例如在一些
“perl -V”输出的详细信息。 有关更多信息,请参阅 perlrepository。
· 作为“Test::Harness”2.x 到 3.x 升级的一部分,实验
“Test::Harness::Straps”模块已被移除。 有关更多信息,请参阅“模块和 Pragmata”
细节。
· 作为“ExtUtils::MakeMaker”升级的一部分,“ExtUtils::MakeMaker::bytes”和
“ExtUtils::MakeMaker::vmsish”模块已从此发行版中删除。
· "Module::CoreList" 不再包含 %:patchlevel 哈希。
· "length undef" 现在返回 undef。
· 不受支持的私有 C API 函数现在被声明为“静态”以防止泄漏到
Perl 的公共 API。
· 支持引导过程, 小程序 不再使用 UTF-8 支持构建
正则表达式引擎。
这允许使用 PERL_UNICODE 集和 UTF-8 语言环境完成构建。 没有
这是一个引导问题,因为 miniperl 无法加载的 UTF-8 组件
regexp 引擎,因为它们尚未构建。
· 小程序的@INC 现在仅限于“-I...”,$ENV{PERL5LIB} 的拆分,以及
“”。”
· 现在在“#line XXX”指令之后需要一个空格或换行符。
· 绑定的文件句柄现在有一个额外的方法 EOF,它提供 EOF 类型。
· 为了更好地匹配所有其他流量控制语句,“foreach”可能不再用作
一个属性。
· Perl 的命令行开关“-P”,在 5.10.0 版本中被弃用,现在已经
移除。 CPAN 模块“Filter::cpp”可以用作替代。
弃用
有时,Perl 的开发人员发现有必要弃用特性或模块
我们之前已经作为核心发行版的一部分发布了。 我们深知痛苦
和向后不兼容的 Perl 更改可能会给开发人员带来的挫败感
用 Perl 构建或维护软件。 您可以确定,当我们弃用
功能或语法,这不是我们轻易做出的选择。 有时,我们选择
弃用功能或语法,因为它被发现设计不当或
实施的。 有时,这是因为他们阻碍了其他功能或导致
性能问题。 有时,原因更复杂。 只要有可能,我们都会尝试
至少在以前的形式中为开发人员保留已弃用的功能
一个主要版本。 只要已弃用的功能不会主动破坏我们的能力
为了维护和扩展 Perl,我们将尽可能长时间地保留它。
以下项目现已弃用:
超级用户
“suidperl”不再是 Perl 的一部分。 它曾经提供一种机制来模拟 setuid
不正确支持它的系统上的权限位。
使用“:=”表示空的属性列表
Perl 解析器的一个意外意味着这些结构都是等价的:
我的 $pi := 4;
我的 $pi : = 4;
我的 $pi : = 4;
将“:”视为属性列表的开始,在属性列表之前结束
“=”。 由于空白在这里并不重要,所有都被解析为一个空的属性列表,
因此以上所有等价于,更好地写成
我的 $pi = 4;
因为没有对空列表进行属性处理。
照原样,这意味着“:=”不能用作新标记,除非默默更改
现有代码的含义。 因此,该特定形式现在已被弃用,并将
成为语法错误。 如果绝对需要有空的属性列表
(例如,由于代码生成器)然后通过添加空格来避免警告
在“=”之前。
“通用->导入()”
现在不推荐使用方法“UNIVERSAL->import()”。 试图通过导入
“use UNIVERSAL”语句的参数将导致弃用警告。
使用“goto”跳转到一个结构
现在不推荐使用“goto”从外部作用域跳转到内部作用域。 这
罕见的用例在范围的实现中引起了问题。
\N{name} 中的自定义字符名称看起来不像名称
客栈{姓名}”, 姓名 可以是任何东西。 标准的 Unicode 名称有一个非常
有限的域,但自定义名称翻译器可以创建名称,例如,
完全由标点符号组成。 现在不推荐使用不命名的名称
以字母字符开头,并且不是字母数字或包含除
很少有其他字符,即空格、破折号、括号和冒号。 因为
"\N" 的附加含义(参见 ""\N"experimental regex escape"),名称看起来像
花括号括起来的量词不起作用。 例如,“\N{3,4}”现在意味着
匹配 3 到 4 个非换行符; 在创建自定义名称“3,4”之前。
弃用的模块
在未来的版本中,以下模块将从核心发行版中删除,
并且应该从 CPAN 安装。 CPAN 上的发行版需要这些
应该将它们添加到他们的先决条件中。 这些模块的核心版本警告
将发出弃用警告。
如果您发布了 Perl 的打包版本,无论是单独的还是作为更大系统的一部分,
那么您应该仔细考虑核心模块弃用的影响。 你
可能需要考虑将您的默认 Perl 构建与部分或全部包一起发送
安装到“供应商”或“站点”perl 库目录中的已弃用模块。
这将抑制弃用警告。
或者,您可能需要考虑修补 lib/deprecate.pm 提供
特定于您的包装系统或 Perl 发行版的弃用警告,
与您的包装系统或分销管理分阶段过渡的方式保持一致
从安装单个包提供给定的版本
功能,到系统管理员需要知道的更高版本
安装多个软件包以获得相同的功能。
您可以通过从以下位置安装相关模块来消除这些弃用警告
CPAN。 要安装所有这些的最新版本,只需安装
“任务::弃用::5_12”。
类::ISA
豆荚::平淡无奇
外壳
Switch 开关
Switch 有问题,应避免使用。 您可能会发现 Perl 的新“given”/“when”
具有合适的替代品。 有关更多信息,请参阅 perlsyn 中的“Switch 语句”
信息。
分配给 $[
属性的使用 :locked on subroutines
使用带有属性 pragma 的“locked”
使用带有属性 pragma 的“unique”
Perl_pmflag
“Perl_pmflag”不再是 Perl 公共 API 的一部分。 现在调用它会生成一个
弃用警告,它将在未来版本中删除。 虽然列为
作为 API 的一部分,它从未被记录在案,只在 令牌,并且之前
regcomp.c. 在核心中,它已被静态函数取代。
大量 Perl 4 时代的库
termcap文件, 污点.pl, 统计文件, shellwords.pl, 密码, 开放3.pl, 开放2.pl,
新的getopt.pl, 看.pl, 查找文件, 查找深度文件, 导入环境文件, 主机名.pl, getopts.pl,
获取选择文件, 获取文件, 冲洗文件, fastcwd.pl, 异常.pl, 时间文件, 完整.pl,
缓存输出文件, 比格拉特.pl, 大数据文件, 大浮动.pl, 断言文件, 缩写.pl, .pl文件和
时间本地文件 现在都已弃用。 早些时候,Perl 的开发人员打算删除
这些库来自 Perl 5.14.0 版本的核心。
在 5.12.0 发布前的最终测试中,一些开发人员发现
当前使用这些古老库的生产代码,一些在 Perl 核心中
本身。 因此,抽水者准许他们暂缓执行。 他们将开始
警告他们在 5.14.0 版本中的弃用,并将在
5.16.0发布。
统一 翻修
Perl 的开发人员齐心协力更新 Perl 以与
最新的 Unicode 标准。 对此的更改包括:
Perl 现在可以处理每个 Unicode 字符属性。 新文档,perluniprops,
列出所有可用的非 Unihan 字符属性。 默认情况下,perl 不公开
Unihan、不推荐使用或 Unicode 内部属性。 有关这些的更多详细信息,请参见下文;
pod 中还有一个部分列出了它们,并解释了为什么它们没有公开。
Perl 现在完全支持使用“=”和“:”编写常规的 Unicode 复合样式
表达式:“\p{property=value}”和“\p{property:value}”(两者的意思相同
事物)。
Perl 现在完全支持大括号之间文本的 Unicode 松散匹配规则
"\p{...}" 构造。 此外,Perl 允许数字之间的下划线。
Perl 现在接受所有 Unicode 定义的属性和属性值同义词。
与 Unicode 逻辑字符匹配的“qr/\X/”已被扩展以更好地与
各种亚洲语言。 它现在被定义为 扩展 字素 簇。 (见
<http://www.unicode.org/reports/tr29/>)。 之前匹配的任何东西都是有意义的
将继续被接受。 此外:
· "\X" 不会拆分 "CR LF" 序列。
· "\X" 现在将匹配包含 "ZWJ" 和 "ZWNJ" 字符的序列。
· "\X" 现在将始终匹配至少一个字符,包括初始标记。 分数
通常在基本字符之后,但在 Unicode 中可以将它们放在
隔离,“\X”现在将处理这种情况,例如在一行的开头,
或在“ZWSP”之后。 这是“\X”与它不匹配的部分
习惯了没有意义。 以前,例如,您可以拥有无意义的
重音 LF 的情况。
· "\X" 现在将匹配(韩语)韩文音节序列,以及泰语和老挝语
例外情况。
否则,此更改对于未受影响的语言应该是透明的。
使用 Canonical_Combining_Class 属性的“\p{...}”匹配被完全破坏
以前的 Perl 版本。 它们现在应该可以正常工作。
在 Perl 5.12 之前,Unicode“Decomposition_Type=Compat”属性和 Perl 扩展
具有相同的名称,这导致既不匹配所有正确的值(超过
一个错误 100 个,另一个错误几千个)。 Perl 扩展现在已经
重命名为“Decomposition_Type=Noncanonical”(简称:“dt=noncanon”)。 它具有相同的
意思是之前的意图,即所有非规范的联合
分解类型,Unicode“Compat”只是其中之一。
“\p{Decomposition_Type=Canonical}”现在包括韩文音节。
"\p{Uppercase}" 和 "\p{Lowercase}" 现在按照 Unicode 标准规定的那样工作。
这意味着它们每个匹配的字符都比以前多一些。
“\p{Cntrl}”现在匹配与“\p{Control}”相同的字符。 这意味着它不再
匹配私有使用 (gc=co)、代理 (gc=cs) 或格式 (gc=cf) 代码点。 格式
代码点代表最大的可能问题。 除了 36 个之外,其余的都是
正式弃用或强烈建议不要使用。 在这 36 个中,可能是
使用最广泛的是软连字符 (U+00AD),以及 BOM、ZWSP、ZWNJ、WJ 和类似的
字符,加上双向控制。
“\p{Alpha}”现在匹配与“\p{Alphabetic}”相同的字符。 在 5.12 之前,Perl 的
定义包括许多不是真正的 alpha(所有标记)的东西,同时省略了
许多是。 "\p{Alnum}" 和 "\p{Word}" 的定义取决于 Alpha 的定义
并相应地发生了变化。
"\p{Word}" 不再错误地匹配非单词字符,例如分数。
“\p{Print}”不再匹配行控制字符:Tab、LF、CR、FF、VT 和 NEL。
这使其符合标准和文档。
“\p{XDigit}”现在匹配与“\p{Hex_Digit}”相同的字符。 这意味着在
除了当前匹配的字符“[A-Fa-f0-9]”,它还会匹配22
全角等价物,例如 U+FF10: FULLWIDTH DIGIT ZERO。
数字类型属性已扩展为包括 Unihan 字符。
有一个新的 Perl 扩展,即“Present_In”,或简称为“In”,属性。 这是一
Unicode Age 属性的扩展,但 "\p{In=5.0}" 匹配任何使用的代码点
已经确定 as of Unicode 版本 5.0。 "\p{Age=5.0}" 只匹配代码点
加入 恰恰 版本5.0。
许多属性现在具有未分配代码点的正确值。 这
受影响的属性是 Bidi_Class、East_Asian_Width、Joining_Type、Decomposition_Type、
Hangul_Syllable_Type、Numeric_Type 和 Line_Break。
Default_Ignorable_Code_Point、ID_Continue 和 ID_Start 属性现在是最新的
使用当前的 Unicode 定义。
Perl 的早期版本错误地暴露了某些本应为
Unicode 仅限内部使用。 如果启用,在正则表达式中使用这些现在将生成,
弃用警告消息。 属性是:Other_Alphabetic,
Other_Default_Ignorable_Code_Point、Other_Grapheme_Extend、Other_ID_Continue、
Other_ID_Start、Other_Lowercase、Other_Math 和 Other_Uppercase。
现在可以更改 Perl 理解的每个 Unicode 属性
安装基础。 如上所述,默认情况下某些属性是关闭的。
这些包括所有 Unihan 属性(应该可以通过 CPAN 模块访问
Unicode::Unihan) 以及 Perl 从未有过的任何弃用或 Unicode 内部专用属性
裸露。
“lib/unicore/To”目录中生成的文件现在更清楚地标记为
稳定,可直接由应用程序使用。 其中的新哈希条目给出了
正常条目,这允许更容易的机器解析。 Perl可以在这个里面生成文件
任何属性的目录,尽管大多数都被抑制了。 您可以找到以下说明
更改用 perluniprops 编写的内容。
科目 和 实用语
新建 科目 和 实用语
“自动”
“autodie”是“Fatal”模块的新词法范围替代。 捆绑的
版本是 2.06_01。 请注意,在此版本中,当“autodie”为
实际上会导致 autodie 行为泄漏到周围的范围内。 看
autodie 中的“BUGS”了解更多详情。
版本 2.06_01 已添加到 Perl 核心。
“压缩::原始:: Bzip2”
2.024 版已添加到 Perl 核心。
“超载”
“重载”允许您在词法上禁用或启用部分或全部重载
操作。
0.001 版已添加到 Perl 核心。
“父母”
“父”在编译时与基类建立 ISA 关系。 它
提供“基础”的关键特性,而没有进一步的不良行为。
0.223 版已添加到 Perl 核心。
“解析::CPAN::Meta”
1.40 版已添加到 Perl 核心。
"VMS::DCLsym"
1.03 版已添加到 Perl 核心。
“VMS::Stdio”
2.4 版已添加到 Perl 核心。
"XS::APItest::KeywordRPN"
0.003 版已添加到 Perl 核心。
更新 实用语
“根据”
从版本 2.13 升级到 2.15。
“大数”
从版本 0.22 升级到 0.23。
“字符”
“charnames”现在包含Unicode 名称别名.txt 数据库文件。 这有
添加一些以前不会出现的额外“\N”字符名称的效果
认可; 例如,“\N{拉丁文大写字母 GHA}”。
从版本 1.06 升级到 1.07。
“不变”
从版本 1.13 升级到 1.20。
“诊断”
“诊断”现在在内部支持 %.0f 格式。
“诊断”不再抑制“在范围(或翻转)中使用未初始化的值”
警告。 [perl #71204]
从版本 1.17 升级到 1.19。
“特征”
在“功能”中,“:5.10”和“:5.10.X”功能包的含义发生了变化
轻微地。 最后一个组件,如果有的话(即“X”)被简单地忽略。 这是谓语
假设新功能通常不会添加到维护中
发布。 所以 ":5.10" 和 ":5.10.X" 具有相同的效果。 这是对
为 5.10.0 记录的行为。
“功能”现在包括“unicode_strings”功能:
使用功能“unicode_strings”;
此编译指示为大小写更改操作(“uc”、“lc”、
"ucfirst", "lcfirst") 在没有设置内部 UTF-8 标志的字符串上,但是
包含 128 到 255 之间的单字节字符。
从版本 1.11 升级到 1.16。
“较少的”
“less”现在包括“stash_name”方法以允许选择“less”的子类
在 %^H 中存储他们的藏匿处。
从版本 0.02 升级到 0.03。
“库”
从版本 0.5565 升级到 0.62。
“先生”
“mro”现在作为 XS 扩展实现。 文档化的界面没有改变。
代码依赖于一些“mro::”方法碰巧是的实现细节
随时可用可以“保留两部分”。
从版本 1.00 升级到 1.02。
“超载”
“重载”现在允许重载“qr”。
从版本 1.06 升级到 1.10。
“线程”
从版本 1.67 升级到 1.75。
“线程::共享”
从版本 1.14 升级到 1.32。
“版”
“版本”现在支持“版本号格式”,如本文前面所述
文档和它自己的文档。
从版本 0.74 升级到 0.82。
“警告”
“warnings”有一个新的“warnings::fatal_enabled()”函数。 它还包括一个新的
“illegalproto”警告类别。 另请参阅“新的或更改的诊断”
改变。
从版本 1.06 升级到 1.09。
更新 科目
“存档::提取”
从版本 0.24 升级到 0.38。
“档案::焦油”
从版本 1.38 升级到 1.54。
“属性::处理程序”
从版本 0.79 升级到 0.87。
“自动装载机”
从版本 5.63 升级到 5.70。
“B::简洁”
从版本 0.74 升级到 0.78。
“B::调试”
从版本 1.05 升级到 1.12。
"B::Deparse"
从版本 0.83 升级到 0.96。
“B::皮棉”
从版本 1.09 升级到 1.11_01。
“电脑动画”
从版本 3.29 升级到 3.48。
“类::ISA”
从版本 0.33 升级到 0.36。
注意:“Class::ISA”已被弃用,可能会从 Perl 的未来版本中删除。
“压缩::原始:: Zlib”
从版本 2.008 升级到 2.024。
“CPAN”
从版本 1.9205 升级到 1.94_56。
“CPANPLUS”
从版本 0.84 升级到 0.90。
“CPANPLUS::Dist::Build”
从版本 0.06_02 升级到 0.46。
“数据::倾销者”
从版本 2.121_14 升级到 2.125。
“数据库_文件”
从版本 1.816_1 升级到 1.820。
“开发::PPPort”
从版本 3.13 升级到 3.19。
“消化”
从版本 1.15 升级到 1.16。
“摘要:: MD5”
从版本 2.36_01 升级到 2.39。
“文摘::SHA”
从版本 5.45 升级到 5.47。
“编码”
从版本 2.23 升级到 2.39。
“出口商”
从版本 5.62 升级到 5.64_01。
"ExtUtils::CBuilder"
从版本 0.21 升级到 0.27。
“ExtUtils::命令”
从版本 1.13 升级到 1.16。
"ExtUtils::Constant"
从版本 0.2 升级到 0.22。
“ExtUtils::安装”
从版本 1.44 升级到 1.55。
“ExtUtils::MakeMaker”
从版本 6.42 升级到 6.56。
“ExtUtils::清单”
从版本 1.51_01 升级到 1.57。
“ExtUtils::ParseXS”
从版本 2.18_02 升级到 2.21。
“文件::获取”
从版本 0.14 升级到 0.24。
“文件路径”
从版本 2.04 升级到 2.08_01。
“文件::临时”
从版本 0.18 升级到 0.22。
“过滤器::简单”
从版本 0.82 升级到 0.84。
“过滤器::实用::调用”
从版本 1.07 升级到 1.08。
“Getopt::Long”
从版本 2.37 升级到 2.38。
“IO”
从版本 1.23_01 升级到 1.25_02。
“IO::Zlib”
从版本 1.07 升级到 1.10。
“IPC::Cmd”
从版本 0.40_1 升级到 0.54。
“IPC::SysV”
从版本 1.05 升级到 2.01。
“语言环境::生成文本”
从版本 1.12 升级到 1.14。
“语言环境::生成文本::简单”
从版本 0.18 升级到 0.21。
“日志::消息”
从版本 0.01 升级到 0.02。
“日志::消息::简单”
从版本 0.04 升级到 0.06。
“数学::BigInt”
从版本 1.88 升级到 1.89_01。
“数学::BigInt::FastCalc”
从版本 0.16 升级到 0.19。
“数学::大老鼠”
从版本 0.21 升级到 0.24。
“数学::复杂”
从版本 1.37 升级到 1.56。
“记忆”
从版本 1.01_02 升级到 1.01_03。
“MIME::Base64”
从版本 3.07_01 升级到 3.08。
“模块::构建”
从版本 0.2808_01 升级到 0.3603。
“模块::核心列表”
从版本 2.12 升级到 2.29。
“模块::加载”
从版本 0.12 升级到 0.16。
“模块::负载::条件”
从版本 0.22 升级到 0.34。
“模块::加载”
从版本 0.01 升级到 0.06。
“模块::可插拔”
从版本 3.6 升级到 3.9。
“网络::平”
从版本 2.33 升级到 2.36。
“下一个”
从版本 0.60_01 升级到 0.64。
“对象::访问器”
从版本 0.32 升级到 0.36。
“包::常量”
从版本 0.01 升级到 0.02。
“PerlIO”
从版本 1.04 升级到 1.06。
“Pod::Parser”
从版本 1.35 升级到 1.37。
“Pod::Perldoc”
从版本 3.14_02 升级到 3.15_02。
“Pod::Plainer”
从版本 0.01 升级到 1.02。
注意:“Pod::Plainer”已被弃用,可能会从 Perl 的未来版本中删除。
“Pod::简单”
从版本 3.05 升级到 3.13。
“安全的”
从版本 2.12 升级到 2.22。
“自加载器”
从版本 1.11 升级到 1.17。
“可储存”
从版本 2.18 升级到 2.22。
“转变”
从版本 2.13 升级到 2.16。
注意:“Switch”已被弃用,可能会从 Perl 的未来版本中删除。
“系统::系统日志”
从版本 0.22 升级到 0.27。
“术语::ANSI颜色”
从版本 1.12 升级到 2.02。
“术语::用户界面”
从版本 0.18 升级到 0.20。
“测试”
从版本 1.25 升级到 1.25_02。
“测试::线束”
从版本 2.64 升级到 3.17。
“测试::简单”
从版本 0.72 升级到 0.94。
“文本::平衡”
从版本 2.0.0 升级到 2.02。
“文本::解析词”
从版本 3.26 升级到 3.27。
“文本:: Soundex”
从版本 3.03 升级到 3.03_01。
“线程::队列”
从版本 2.00 升级到 2.11。
“线程::信号量”
从版本 2.01 升级到 2.09。
“领带::RefHash”
从版本 1.37 升级到 1.38。
“时间::高分辨率”
从版本 1.9711 升级到 1.9719。
“时间::本地”
从版本 1.18 升级到 1.1901_01。
“时间::件”
从版本 1.12 升级到 1.15。
“Unicode::整理”
从版本 0.52 升级到 0.52_01。
“Unicode::标准化”
从版本 1.02 升级到 1.03。
“ Win32”
从版本 0.34 升级到 0.39。
“Win32API::文件”
从版本 0.1001_01 升级到 0.1101。
“XSLoader”
从版本 0.08 升级到 0.10。
去除 科目 和 实用语
“属性”
从 Perl 核心中删除。 之前的版本是 1.02。
“CPAN::API::HOWTO”
从 Perl 核心中删除。 之前的版本是'undef'。
“CPAN::延迟代码”
从 Perl 核心中删除。 之前的版本是 5.50。
"CPANPLUS::inc"
从 Perl 核心中删除。 之前的版本是'undef'。
“DCL符号”
从 Perl 核心中删除。 之前的版本是 1.03。
“ExtUtils::MakeMaker::bytes”
从 Perl 核心中删除。 之前的版本是 6.42。
“ExtUtils::MakeMaker::vmsish”
从 Perl 核心中删除。 之前的版本是 6.42。
“演播室”
从 Perl 核心中删除。 之前的版本是 2.3。
“测试::线束::断言”
从 Perl 核心中删除。 之前的版本是 0.02。
“测试::线束::迭代器”
从 Perl 核心中删除。 之前的版本是 0.02。
“测试::线束::点”
从 Perl 核心中删除。 之前的版本是 0.01。
“测试::线束::结果”
从 Perl 核心中删除。 之前的版本是 0.01。
“测试::线束::肩带”
从 Perl 核心中删除。 之前的版本是 0.26_01。
“测试::线束::实用程序”
从 Perl 核心中删除。 之前的版本是 0.01。
“XSSymSet”
从 Perl 核心中删除。 之前的版本是 1.1。
已过时 科目 和 实用语
请参阅上面的“弃用模块”。
文件记录
新建 文件记录
· perlhaiku 包含有关如何为 Haiku 平台构建 perl 的说明。
· perlmroapi 描述了可插入方法解析顺序的新接口。
· perlperf,由 Richard Foley 编写,介绍了性能和
可以特别参考 perl 程序使用的优化技术。
· perlrepository 描述了如何使用 混帐 版本控制
系统。
· perlpolicy 将“关于贡献模块的社会契约”扩展到了开头
关于 Perl 移植政策的文档。
更改 至 现有 文件记录
·各种大 变化* 文件(列出了过去对 perl 所做的每一个更改
18 年)已被删除,取而代之的是一个小文件,也称为 更改,这
只是解释了如何从 git 版本控制中提取相同的信息
系统。
· 移植/patching.pod 已被删除,因为它主要描述与旧的交互
基于 Perforce 的存储库,现已过时。 信息仍然相关
移至 perlrepository。
· 语法“unless (EXPR) BLOCK else BLOCK”现在被记录为有效,就像
语法“除非 (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK”,虽然实际上
对于源代码的可读性,使用后者可能不是最好的主意。
· 记录-X 重载。
· 记录了“when()”对大多数文件测试操作符的特殊处理
· 记录“when”作为语法修饰符。
· 删除了描述 5005 个线程的“旧 Perl 线程教程”。
豆荚/ perlthrtut.pod 是为 ithread 重新加工的相同材料。
· 更正以前的文档:不推荐使用 v-strings
对于版本对象,我们需要它们使用 MODULE VERSION 语法。 此补丁删除
弃用通知。
· 安全联系信息现在是 perlsec 的一部分。
· 核心文档的很大一部分已更新以阐明
Perl 的 Unicode 处理行为。
为清楚起见,大部分剩余的核心文档都经过审查和编辑,
一致地使用语言,并修正 Tom Christiansen 名字的拼写。
· Pod 规范 (perlpodspec) 已更新,将规范引入
符合大多数 Pod 系统已经支持的现代用法。 一个参数字符串可以
现在遵循“开始/结束”区域中的格式名称。 带有文本的 URI 链接
现在允许描述。 "L<"section">" 的用法已被标记为
已弃用。
· if.pm 已经记录在 perlfunc 的“use”中,作为获取条件加载的一种手段
尽管在“使用”周围有隐式的 BEGIN 块。
· 澄清了 perlvar.pod 中 $1 的文档。
· "\N{U+码 观点}” 现在已记录在案。
选 性能 增强
· 新的内部缓存意味着“isa()”通常会更快。
· 优化了“C3”方法解析顺序的实现——线性化
对于具有单继承的类,速度提高 40%。 多人表演
继承不变。
· 在“使用区域设置”下,与区域设置相关的信息现在缓存在只读值上,
例如“keys %hash”返回的列表。 这使得诸如“排序键
%hash”在“使用语言环境”范围内要快得多。
· 不再调用空的“DESTROY”方法。
· “Perl_sv_utf8_upgrade()”现在更快了。
· 空散列上的“键”现在更快。
· “if (%foo)”已被优化为比“if (keys %foo)”更快。
· 字符串重复操作符 ("$str x $num") 现在当 $str
长度为一或 $num 很大。
· 在 void 上下文中将数组反转为自身(如在“@a = reverse @a”中)现在发生在-
并且比以前快了几个数量级。 它也会
尽可能保留不存在的元素,即对于非魔法数组或绑定
具有“EXISTS”和“DELETE”方法的数组。
安装 和 配置 建设
· perlapi、perlintern、perlmodlib 和 perltoc 现在都在构建时生成,
而不是作为发布的一部分发货。
· 如果“vendorlib”和“vendorarch”相同,则它们只添加到@INC 一次。
· $Config{usedevel} 和 C-level "PERL_USE_DEVEL" 现在定义为 perl 构建
与“-Dusedevel”。
· 配置 将启用“-fstack-protector”,以提供针对堆栈的保护-
粉碎攻击,如果编译器支持它。
· 配置 现在将确定可重入函数的正确原型和
“gconvert”,如果您使用的是 C++ 编译器而不是 C 编译器。
· 在 Unix 上,如果从包含 git 存储库的树构建,则配置
进程将记录您已签出的提交哈希,以显示在输出中
“perl -v”和“perl -V”。 未推送的本地提交会自动添加到
“perl -V”显示的本地补丁。
· Perl 现在支持 SystemTap 的“dtrace”兼容层和链接问题
“miniperl”已在此过程中得到修复。
· perldoc 现在使用“less -R”而不是“less”来改善行为
"groff" 对 ANSI 转义码的新用法。
· "perl -V" 现在报告编译时选项 "USE_PERL_ATOF" 和
“USE_ATTRIBUTES_FOR_PERLIO”。
· 作为扁平化的一部分 分机,所有平台上的所有扩展都是由
make_ext.pl. 这取代了 Unix 特定的 分机/实用程序/make_ext, VMS 专用
make_ext.com 和 Win32 特定的 win32/buildext.pl.
全内走线 更改
Perl 的每个版本都会看到许多不应影响日常的内部变化
用法,但对于使用 Perl 源代码的开发人员来说可能仍然值得注意。
· C 源文件开头的 JRR Tolkien 引用已经检查正确
添加了引文,感谢 Tom Christiansen 的补丁。
· 传统上发现的双寿命模块的内部结构 LIB / 和
ext / perl 源中的目录发生了重大变化。 在可能的情况下,双
生命模块已从 LIB / 和 ext /.
由 Perl 开发人员维护的双生命模块作为 Perl 核心的一部分现已上线
in DIST /. 主要在 CPAN 上维护的双寿命模块现在位于 时间/。 何时
报告位于下面的模块中的错误 时间/, 请直接发送您的错误报告
到模块的错误跟踪器或作者,而不是 Perl 的错误跟踪器。
· "\N{...}" 现在编译更好,总是强制 UTF-8 内部表示
Perl 的开发人员修复了识别“\N{...}”的几个问题
结构体。 作为其中的一部分,perl 将存储任何包含以下内容的标量或正则表达式
"\N{姓名}” 或 "\N{U+码 观点}” 在其 UTF-8 格式的定义中。 (这是真的
以前对于所有出现的 "\N{姓名}” 没有使用自定义翻译器,但是
现在它总是正确的。)
· Perl_magic_setmglob 现在知道 globs,修复 RT #71254。
· “SVt_RV”不再存在。 RV 现在存储在 IV 中。
· “Perl_vcroak()”现在接受一个空的第一个参数。 此外,还进行了全面审计
“not NULL”编译器注释,以及其他几个内部函数的注释
被纠正。
· 添加了新的宏“dSAVEDERRNO”、“dSAVE_ERRNO”、“SAVE_ERRNO”、“RESTORE_ERRNO”
正式化“errno”变量的临时保存。
· 添加了函数“Perl_sv_insert_flags”以扩充“Perl_sv_insert”。
· 增加了函数“Perl_newSV_type(type)”,相当于“Perl_newSV()”
后跟“Perl_sv_upgrade(类型)”。
· 增加了函数“Perl_newSVpvn_flags()”,相当于“Perl_newSVpvn()”
然后执行与标志相关的操作。
目前支持两个标志位。
· "SVf_UTF8" 会为你调用 "SvUTF8_on()"。 (请注意,这不会转换
ISO 8859-1 字符序列到 UTF-8)。 一个包装器,“newSVpvn_utf8()”是
可用于此。
· "SVs_TEMP" 现在在新的 SV 上调用 "Perl_sv_2mortal()"。
还有一个接受常量字符串的包装器,“newSVpvs_flags()”。
· 函数“Perl_croak_xs_usage”已添加为“Perl_croak”的包装器。
· Perl 现在导出函数“PerlIO_find_layer”和“PerlIO_list_alloc”。
· “PL_na”已从核心代码中剔除,取而代之的是本地STRLEN
临时文件或“*_nolen()”调用。 任何一种方法都比“PL_na”快,这是一个
指针解引用到 ithreads 下的解释器结构,以及一个全局
否则变量。
· "Perl_mg_free()" 用于保留可通过标量上的 "SvMAGIC()" 访问的已释放内存。
它现在更新链表以在释放每个魔法时删除它。
· 在 ithreads 下,“PL_reg_curpm”中的正则表达式现在被引用计数。 这消除了
许多hackish变通办法来应对它没有被引用计数。
· "Perl_mg_magical()" 有时会错误地打开 "SvRMAGICAL()"。 这已经
固定的。
· 国家 如果字符串值尾随“垃圾”,则不会设置 IV 和 NV 标志。
此行为与不设置公共 IV 或 NV 标志一致,如果值
超出类型范围。
· 使用“Nullav”、“Nullcv”、“Nullhv”、“Nullop”、“Nullsv”等已被替换为
核心代码中的“NULL”,以及非双重生命模块,因为“NULL”对那些更清楚
不熟悉核心代码。
· 添加了一个宏 MUTABLE_PTR(p),它在(非迂腐的)gcc 上不会被抛弃
“const”,返回一个“void *”。 宏“MUTABLE_SV(av)”、“MUTABLE_SV(cv)”等建立在
这,投射到“AV *”等而不抛弃“const”。 这允许正确的编译-
核心中“const”正确性的时间审计,并帮助发现了一些错误
(现已修复)。
· 添加了宏 "mPUSHs()" 和 "mXPUSHs()",用于将 SVs 推入堆栈和
使他们丧命。
· 私有结构“mro_meta”的使用略有变化。 核心之外什么都没有
无论如何都应该直接访问它。
· 一个新工具, 移植/扩展宏.pl 已添加,允许您查看 C
编译时将扩展预处理器宏。 这在尝试时很方便
解码 perl 胆量的宏地狱。
测试与验证
测试与验证 改善
并行测试
核心发行版现在可以在类 Unix 上并行运行其回归测试
平台。 不要运行“make test”,而是将环境中的“TEST_JOBS”设置为
并行运行的测试数量,并运行“make test_harness”。 在类似伯恩
shell,这可以做为
TEST_JOBS=3 make test_harness # 并行运行 3 个测试
使用环境变量,而不是并行 make 本身,因为
TAP::Harness 需要能够安排单独的非冲突测试脚本
本身,并且没有标准接口来“制作”实用程序以与其交互
作业调度程序。
请注意,当前一些测试脚本在并行运行时可能会失败(最显着的是
“ext/IO/t/io_dir.t”)。 如有必要,仅按顺序再次运行失败的脚本,然后
看看故障是否消失。
测试线束灵活性
现在可以覆盖“PERL5OPT”和朋友 吨/测试
测试看门狗
如果失败可能会永远挂起的几个测试现在包含一个
“看门狗”功能将在超时后杀死它们,这有助于确保
“make test”和“make test_harness”自动运行完成。
新建 检测
Perl 的开发人员向核心添加了许多新测试。 除了物品
下面列出了从 CPAN 更新的许多模块包含新的测试。
· 对核心测试进行重大清理,以确保语言和解释器功能
在它们被测试之前不被使用。
· “make test_porting”现在运行一些重要的预提交检查,这些检查可能是
用于在 Perl 核心上工作的任何人。
· t/移植/podcheck.t 自动检查在所有 .pl 中找到的 POD 的格式良好,
.pm 和 .pod 文件 表现,除了在双寿命模块中
主要在 Perl 核心之外维护。
· t/移植/manifest.t 现在测试清单中列出的所有文件是否存在。
· t/op/while_readdir.t 测试 while 循环中的裸 readdir 是否设置了 $_。
· t/comp/retainedlines.t 检查调试器是否可以保留来自“eval”的源代码行。
· t/io/perlio_fail.t 检查坏层是否失败。
· t/io/perlio_leaks.t 检查 PerlIO 层没有泄漏。
· t/io/perlio_open.t 检查某些特殊形式的开放作品。
· t/io/perlio.t 包括一般的 PerlIO 测试。
· t/io/pvbm.t 检查内部类型之间没有意外的交互
“PVBM”和“PVGV”。
· t/mro/package_aliases.t 检查 mro 是否在存在别名的情况下正常工作
包。
· t/op/dbm.t 测试“dbmopen”和“dbmclose”。
· t/op/index_thr.t 测试“索引”和线程的交互。
· t/op/pat_thr.t 测试深奥的模式和线程的交互。
· t/op/qr_gc.t 测试“qr”不会泄漏。
· t/op/reg_email_thr.t 测试正则表达式递归和线程的交互。
· t/op/regexp_qr_embed_thr.t 测试模式与嵌入的“qr//”和
线程。
· t/op/regexp_unicode_prop.t 测试正则表达式中的 Unicode 属性。
· t/op/regexp_unicode_prop_thr.t 测试 Unicode 属性的交互和
线程。
· t/op/reg_nc_tie.t 测试“Tie::Hash::NamedCapture”的绑定方法。
· t/op/reg_posixcc.t 检查 POSIX 字符类的行为是否一致。
· t/op/re.t 检查可导出的“re”功能 通用.c 工作。
· t/op/setpgrpstack.t 检查“setpgrp”是否有效。
· t/op/substr_thr.t 测试“substr”和线程的交互。
· t/op/升级.t 检查升级和分配标量是否有效。
· t/uni/lex_utf8.t 检查词法分析器中的 Unicode 是否有效。
· t/uni/tie.t 检查 Unicode 和“领带”是否有效。
· t/comp/final_line_num.t 测试行号在 EOF 处是否正确
· t/comp/form_scope.t 测试格式范围。
· t/comp/line_debug.t 测试 "@{"_<$file"}" 是否有效。
· t/op/文件测试_t.t 测试 -t 文件测试是否有效。
· t/op/qr.t 测试“qr”。
· t/op/utf8cache.t 测试 utf8 缓存的故障。
· t/re/uniprops.t 测试 unicodes "\p{}" 正则表达式结构。
· t/op/文件句柄.t 测试一些合适的可移植文件测试操作符以检查它们
按预期工作,特别是考虑到在工作方式方面所做的一些内部变化
文件句柄是有福的。
· t/op/time_loop.t 测试比“2**63”大的 Unix 倍,现在可以处理了
到“gmtime”和“localtime”,不要造成内部溢出或过长
环。
新建 or 更改 诊断
新建 诊断
· SV 分配跟踪已添加到“-Dm”启用的诊断中。 追踪
也可以通过“PERL_MEM_LOG”机制输出,如果在
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 perl的 二进制被编译。
· Smartmatch 分辨率跟踪已添加为新的诊断。 使用“-DM”启用
它。
· 一个新的调试标志“-DB”现在转储子程序定义,留下“-Dx”作为它的
转储语法树的初衷。
· Perl 5.12 提供了许多新的诊断消息来帮助您编写更好的代码。
有关这些新消息的详细信息,请参阅 perldiag。
· "影响关键字'%s'的坏插件"
· "gmtime(%.0f) 太大了"
· “词法代码试图将非拉丁 1 字符填充到拉丁 1 输入中”
·“词法代码内部错误(%s)”
·“本地时间(%.0f)太大”
·“重载解引用没有返回引用”
·“重载的 qr 没有返回 REGEXP”
· “Perl_pmflag() 已弃用,将从 XS API 中删除”
·“定义子程序后忽略左值属性”
当尝试将子程序标记为左值时,会发出此新警告
它已被定义。
· Perl 现在会在 "++" 或 "--" 无法更改值时发出警告,因为它是
超出代表范围。
这使用了一个新的警告类别:“不精确”。
· "lc"、"uc"、"lcfirst" 和 "ucfirst" 在传递 undef 时发出警告。
·“在“无效上下文中对常量的无用使用”中显示常量”
· "'%s' 之后的原型"
· "恐慌:sv_chop %s"
当 C 例程“Perl_sv_chop()”被传递一个
不在标量字符串缓冲区内的位置。 这可能是由
错误的 XS 代码,此时无法恢复。
· 致命错误“\N 返回的格式错误的 UTF-8”现在产生,如果
“charnames”处理程序返回格式错误的 UTF-8。
· 如果在编译一个未解析的命名字符或序列时遇到
正则表达式模式,那么致命错误“\N{NAME} 必须由词法分析器解决”现在是
产生。 例如,当使用单引号上下文时可能会发生这种情况,例如
“$re = '\N{SPACE}'; /$re/;”。 有关词法分析器如何使用的更多示例,请参阅 perldiag
被绕过。
· “\N{U+...} 中的十六进制数无效”是一个新的致命错误,当
“...”表示的字符常量不是有效的十六进制数。
· "\N" 的新含义为 "[^\n]" 在括号中的字符类中无效,
就像 ”。” 在一个字符类中失去了它的特殊意义,并且会导致
致命错误“字符类中的\N 必须是命名字符:\N{...}”。
· 关于“\N{...}”中的“...”合法性的规则已经收紧,因此
除非“...”以字母字符开头并以
字母数字、破折号、空格、括号或冒号的组合,然后
现在发出警告“\N{...} 中从 '%s' 开始的不推荐使用的字符”。
· 如果出现以下情况,将发出警告“仅使用 \N{} 返回的第一个字符”
“charnames”处理程序返回超出限制的字符序列
可以使用的字符数。 该消息将指示哪个
字符被使用并被丢弃。
更改 诊断
许多现有的诊断消息已得到改进或更正:
· 新的警告类别“illegalproto”允许对周围警告进行更细粒度的控制
函数原型。
两个警告:
“%s 原型中的非法字符:%s”
“%s 的 '%c' 之后的原型:%s”
已从“语法”顶级警告类别移至新的一级警告类别
类别,“非法原型”。 这两个警告是目前唯一发出的警告
在解析无效/非法原型期间,现在可以使用
没有警告 'illegalproto';
仅抑制那些,而不是其他与语法相关的警告。 警告在哪里
原型被更改、忽略或不满足仍属于“原型”类别,因为
过。
·“子程序“%s”的深度递归”
现在可以将此警告的深度阈值从默认值更改为
100,通过重新编译 perl的 二进制,设置 C 预处理器宏
“PERL_SUB_DEPTH_WARN”到所需的值。
· “原型中的非法字符”警告现在在报告非法时更加准确
_ 后的字符
· mro 合并错误消息现在与 Algorithm::C3 产生的错误消息非常相似。
· 改进了错误消息“在列 %d 中无法识别的字符 %s”
将错误消息更改为“无法识别的字符 %s;之后由 <-- HERE 标记”
%s<-- HERE 靠近列 %d"。这应该使它更容易发现和纠正
可疑的角色。
· Perl 现在明确地指向 $。 当它导致范围内的未初始化警告时
标量上下文。
· "split" 现在在 void 上下文中调用时发出警告。
· 使用太少参数调用的“printf”风格的函数现在会发出警告
“%s 中缺少参数” [perl #71000]
· Perl 现在正确地返回一个语法错误而不是段错误,如果“每个”、“键”或
"values" 不带参数使用。
· 如果在没有参数的情况下调用并且没有以前的文件时,“tell()”现在会正确失败
被读过。
“tell()”现在返回“-1”,并将errno设置为“EBADF”,从而恢复5.8.x
行为。
· “重载”不再隐式取消对重复“使用重载”行的回退。
· POSIX::strftime() 现在可以处理格式字符串中的 Unicode 字符。
· 从 5 个警告中删除了“语法”类别,这些警告应该只出现在“已弃用”中。
· 三个致命的“打包”/“解包”错误消息已标准化为“恐慌:%s”
· “Unicode 字符是非法的”已被改写为更准确
它现在显示“Unicode 非字符在交换中是非法的”和 perldiag
文档已经扩展了一点。
· 目前,除了“charnames”处理程序的几个字符中的第一个
在正则表达式模式括号字符中使用时可能会被丢弃
班级。 如果发生这种情况,则会出现警告“仅使用返回的第一个字符
\N{} in character class”将被发布。
· 警告“\N{} 上缺少右大括号或\N 后未转义的左大括号。假设
如果 Perl 遇到“\N{”但没有找到匹配的“}”,则会发出后者。
在这种情况下,Perl 不知道它是否被错误地省略了,或者是否“匹配非换行符”
后跟“匹配“{””是需要的。 它假设后者,因为那实际上是
与其他情况不同,书面的有效解释。 如果你说的是前者
您需要添加匹配的右括号。 如果你的意思是后者,你可以沉默
此警告改为写入“\N\{”。
· "gmtime" 和 "localtime" 调用的数字小于他们可以可靠处理的数字
现在将发出警告“gmtime(%.0f) 太小”和“localtime(%.0f) 太小”。
已删除以下诊断消息:
·“暴走格式”
·“无法为 %s 的父级找到包 %s”
一般来说,这个警告只会与其他警告一起产生,并且
删除它允许添加 ISA 查找优化。
·“使用中的v-string/require是不可移植的”
公用事业 更改
· 每小时 现在也在“include-fixed”中查找,这是gcc搜索中最近添加的
路径。
· H2XS 不再错误地将枚举值视为宏。 它现在也处理 C++
枚举中正确的样式注释(“//”)。
· perl5db.pl 现在支持“LVALUE”子程序。 此外,调试器现在
正确处理代理常量子程序和子程序存根。
· 错误 现在使用 %Module::CoreList::bug_tracker 打印出上游错误跟踪器
网址。 如果用户将特定模块标识为他们的错误报告的主题并且
我们能够推测其上游错误跟踪器的 URL,perlbug 现在提供了一个
给用户的消息解释核心直接复制 CPAN 版本,和
提供用于直接向上游作者报告错误的 URL。
错误 没有实际发送消息时不再报告“已发送消息”
· 非常感谢 是一个用于向作者和维护者发送非错误报告的新实用程序
Perl 的。 除了错误报告一无所获可能会让人感到沮丧。 如果 Perl 5.12
很适合你,请试试 非常感谢. 它会让开发人员微笑。
· Perl 的开发人员在 a2p 与“match()”运算符有关
列出上下文。 此外, a2p 不再生成使用 $[ 变量的代码。
选 问题 修复
· U+0FFFF 现在是正则表达式中的合法字符。
· pp_qr 现在总是返回一个新的正则表达式 SV。 解决 RT #69852。
而不是返回对 optree 中(预编译的)正则表达式的(另一个)引用,
使用 reg_temp_copy() 创建它的副本,并返回对它的引用。 这
解决了有关 Regexp::DESTROY 未被及时调用的问题(
RT #69852 跟踪的原始错误),以及与祝福正则表达式相关的错误,以及
分配给正则表达式,如添加到票证的信件中所述。
事实证明,我们还需要撤消 SVPVX() ithreads 克隆时共享
Regexp SV,因为mother_re 设置为NULL,而不是复制的
妈妈_re。 此更改可能会修复某些其他程序中正则表达式和线程的错误
情况,但到目前为止,测试和错误报告都没有表明任何问题,所以
它实际上可能不是可以达到的边缘情况。
· 修复了使用“-Dmad”构建 perl 时的几个编译错误和段错误。
· 修复了 5.11.2 中的词法分析器 API 更改,该更改破坏了 NYTProf 的 savesrc 选项。
· "-t" 应该只为连接到 TTY 的文件句柄返回 TRUE
Microsoft C 版本的“isatty()”为所有字符模式设备返回 TRUE,
包括 的/ dev / null的-style "nul" 设备和打印机,如 "lpt1"。
· 修复了由 commit fafafbaf 引起的回归导致参数期间发生恐慌
通过 [perl #70171]
· 在没有备份文件的就地编辑的系统上,-i'*' 现在用作
文档说它确实 [perl #70802]
· 保存和恢复魔法标记不再丢失只读标记。
· 格式错误的语法“grep EXPR LIST”(注意缺少的逗号)不再导致突然
和彻底失败。
· 使用“qr{}”字面量编译的正则表达式在匹配时正确设置“$'”
一次。
· 使用带有“sort”的命名子程序不应再导致总线错误 [perl #71076]
· 许多错误修正捕捉由最近添加的词法分析器 API 引起的小问题。
· 与@_ 的智能匹配有时会产生误报。 [perl #71078]
· $@ 现在可以被分配一个只读值(没有错误或破坏堆栈)。
· 从活动比较子程序中递归调用的“排序”不再导致
如果多次运行会出现总线错误。 [perl #71076]
· 如果输入错误,Tie::Hash::NamedCapture::* 不会中止 (RT #71828)
· @_ 和 $_ 不再在线程下泄漏(RT #34342 和 #41138,还有 #70602、#70974)
· shebang 行上的“-I”现在按照文档在@INC 前面添加目录,也是如此
“-I”在命令行中指定时。
· 当调用非数字进程标识符时,“kill”现在是致命的。 此前,一个
“undef”进程标识符将被解释为杀死进程 0 的请求,它
将终止 POSIX 系统上的当前进程组。 由于进程标识符
总是整数,杀死非数字进程现在是致命的。
· 5.10.0 无意中禁用了优化,这导致了可衡量的性能
drop in list assignment,例如经常用于从@_分配函数参数。
优化已重新设置,性能回归已修复。 (这个修复
也存在于 5.10.1)
· 修复了“while (1) { map 1, 1 }” [RT #53038] 上的内存泄漏。
· PerlIO 中的一些潜在核心转储已修复 [RT #57322,54828]。
· 调试器现在可以使用左值子例程。
· 调试器的“m”命令在定义常量的模块上被破坏 [RT #61222]。
·“crypt”和字符串补码可以为未污染的参数返回污染值[RT
#59998]。
· “-i”。后缀 命令行开关现在使用受限重新创建文件
权限,然后再更改其模式以匹配原始文件。 这消除了一个
潜在的竞争条件 [RT #60904]。
· 在某些 Unix 系统上,值以 $? 甚至不会设置最高位(“$?& 128”)
如果子核心倾倒了。
· 在某些情况下,$^R 可能会错误地变为未定义 [RT #57042]。
· 在 XS API 中,各种散列函数,当传递一个预先计算好的散列时,其中的密钥
是 UTF-8,可能会导致不正确的查找。
· XS码包括 XSUB.h before 文件 给出了编译时错误 [RT #57176]。
· 如果包“Foo”不存在,“$object->isa('Foo')”会报告错误,即使
对象的@ISA 包含“Foo”。
· 新的 5.10.0 mro 代码中的各种错误,由操作@ISA 触发,已被
找到并修复。
· 对引用的按位运算可能会导致解释器崩溃,例如 "$x=\$y; $x |=
"foo"" [RT #54956]。
· 包括交替在内的模式可能对内部 UTF-8 敏感
表示,例如
我的 $byte = CHR(192);
我的 $utf8 = CHR(192); utf8::升级($utf8);
$utf8 =~ /$byte|X}/i; # 5.10.0 失败
· 在 UTF8 编码的 Perl 源文件中(即“使用 utf8”有效的地方),双
在“\xNN”、“\0NNN”或“\N{}”是
后跟序数值大于 255 的文字字符 [RT #59908]。
· "B::Deparse" 未能正确解析各种结构:"readpipe STRING" [RT
#62428]、“CORE::require(STRING)”[RT #62488]、“sub foo(_)”[RT #62484]。
· 使用不带参数的“setpgrp”可能会破坏 perl 堆栈。
· “eval”的块形式现在特别可以被“Safe”和“ops”捕获。 之前
它被错误地视为字符串“eval”。
· 在 5.10.0 中,“[~”这两个字符有时会被解析为智能匹配运算符
(“~~”)[RT #63854]。
· 在 5.10.0 中,模式中的“*”量词有时被视为“{0,32767}”[RT
#60034、#60464]。 例如,此匹配将失败:
("ab" x 32768) =~ /^(ab)*$/
· "shmget" 在 32 位操作系统上被限制为 64 位段大小 [RT #63924]。
· 使用“next”或“last”退出“给定”块不再产生虚假警告
像下面这样:
在 foo.pl 第 123 行通过 last 退出
· 为 glob 指定格式可能会破坏格式; 例如:
*bar=*foo{FORMAT}; # foo 格式现在不好
· 尝试将 typeglob 强制转换为字符串或数字可能会导致断言
失败。 现在生成了正确的错误消息,“无法强制 GLOB 到 $类型”.
· 在“use filetest 'access'”下,“-x”使用了错误的访问模式。 这已经
已修复 [RT #49003]。
· 返回 Unicode 值的绑定标量上的“长度”在第一个不正确
时间。 这已被修复。
· 在数组“tie”中使用数组“tie”可以SEGV。 这已被修复。 [RT
第51636话
· “PerlIOStdio_close()”内的竞争条件已被识别和修复。 这用
导致各种线程问题,包括 SEGV。
· 在“解包”中,在标量上下文中使用“()”组是在内部放置一个列表
解释器的堆栈,以各种方式表现出来,包括 SEGV。 这是
现在已修复 [RT #50256]。
· Magic 在“substr”、“\&$x”、“tie $x、$m”和“chop”中被调用了两次。 这些都有
已修复。
· 5.10.0 优化以清除隐式循环内的临时堆栈
"s///ge" 已被还原,因为它原来是在
解释器中看似无关的部分 [commit ef0d4e17921ee3de]。
· "elsif" 中警告的行号现在是正确的。
· “..”运算符现在可以正确处理末端位于或接近于
最小和最大整数的值。
· "binmode STDIN, ':raw'" 可能会导致某些平台上的分段错误。 这有
已修复 [RT #54828]。
· 逐一错误意味着“index $str, ...”被有效地执行为
“索引“$str\0”,...”。 这已得到修复 [RT #53746]。
· 与正则表达式中命名捕获相关的各种泄漏已得到修复 [RT #57024]。
· 对散列的弱引用会泄漏。 这影响了“DBI”[RT #56908]。
· 在正则表达式中使用 (?|) 可能会导致段错误 [RT #59734]。
· 在闭包中使用 UTF-8“tr//”可能会导致段错误 [RT #61520]。
· 调用“Perl_sv_chop()”或以其他方式升级 SV 可能导致未对齐
SPARC 架构上的 64 位访问 [RT #60574]。
· 在 5.10.0 版本中,"inc_version_list" 会在之后错误地列出 "5.10.*"
"5.8.*"; 这影响了@INC 搜索顺序 [RT #67628]。
· 在 5.10.0 中,"pack "a*", $tainted_value" 返回了一个未受污染的值 [RT #52552]。
· 在 5.10.0 中,“printf”和“sprintf”可能会产生致命错误“panic:
utf8_mg_pos_cache_update" 打印 UTF-8 字符串时 [RT #62666]。
· 在 5.10.0 版本中,可能会遗漏动态创建的“AUTOLOAD”方法(方法
缓存问题)[RT #60220,60232]。
· 在 5.10.0 版本中,"use feature" 和 "//ee" 的组合可能会导致内存
泄漏 [RT #63110]。
· shebang ("#!") 行上的 "-C" 再次被允许,如果它也在
命令行。 shebang 行上的“-C”曾经是一个无声的空操作 if 它不是也在
命令行,所以 perl 5.10.0 不允许它,这破坏了一些脚本。 现在 perl
检查它是否也在命令行上,只有在它不是时才会死亡 [RT #67880]。
· 在 5.10.0 中,某些类型的可重入正则表达式可能会崩溃,或导致
以下断言失败 [RT #60508]:
断言 rx->sublen >= (s - rx->subbeg) + 我失败了
· Perl 现在包括以前从 Unicode 字符数据库中丢失的文件。
· Perl 现在在打开匿名临时文件时尊重“TMPDIR”。
平台 获得每个 更改
Perl 非常便携。 一般来说,如果一个平台有一个 C 编译器,就会有人有
将 Perl 移植到它(或将很快)。 我们很高兴地宣布 Perl 5.12 包含支持
对于几个新平台。 同时,是时候告别一些(非常)旧的
朋友。
新建 交易平台
俳句
Perl 的开发人员已经合并了 Haiku 维护人员的补丁。 Perl 现在应该构建
在俳句。
米罗斯BSD
Perl 现在应该构建在 MirOS BSD 上。
停产 交易平台
域/操作系统
薄荷
榫卯
更新 交易平台
AIX
· 移除 libbsd 适用于 AIX 5L 和 6.1。 仅使用了“flock()” libbsd.
· 移除 库数据库 对于 AIX 5L 和 6.1,如果 库数据库 < 1.8.3-5 已安装。 这 库数据库
作为 AIX 工具箱的可选包提供。 不幸的是
低于 1.8.3-5 的版本已损坏。
· 提示更改意味着 AIX 4.2 应该可以再次运行。
Cygwin的
· Perl 现在在 Cygwin 6 和更新版本上支持 IPv1.7。
· 在 Cygwin 上,我们现在从 DLL 中删除最后一个数字。 这是行为
在 cygwin.com 构建多年。 提示文件已更新。
达尔文 (Mac OS X)
· 跳过在 Darwin 1131 (Mac OS X 10) 上测试 be_BY.CP10.6 语言环境,因为它仍然存在
越野车。
· 更正用于识别 Darwin 8 上有问题的语言环境的正则表达式中的错误
9(分别为 Mac OS X 10.4 和 10.5)。
蜻蜓BSD
· 修复线程库选择 [perl #69686]
FreeBSD的
· 提示文件现在可以识别 FreeBSD 7 和
后来。
IRIX
· 我们现在解决了 Irix 6.5 编译器中一个奇怪的预处理器错误:“cc -E -”
不幸的是进入 K&R 模式,但“cc -E file.c”没有。
NetBSD的
· 提示现在支持版本 5.*。
OpenVMS的
· “-UDEBUGGING”现在是 VMS 上的默认设置。
就像它在其他地方已经存在了很多年了。 也制作命令行
在 configure.com 中选择 -UDEBUGGING 和 -DDEBUGGING 工作; 在唯一之前
关闭它的方法是在回答交互式问题时说不。
· 在 8192 位系统上,VMS 上的默认管道缓冲区大小已更新为 64。
· 从“PerlIO::scalar”的内存临时文件中读取,如果 $/
被设置为数字引用(以指示记录式读取)。 这是现在
固定的。
· VMS 现在支持“getgrgid”。
· 对 VMS 文件名处理进行了许多改进和清理,
转换代码。
· 启用“PERL_VMS_POSIX_EXIT”逻辑名称现在将 POSIX 退出状态编码在
一个 VMS 条件值,以便更好地与 GNV 的 bash shell 和其他
依赖于 POSIX 退出值的实用程序。 看到“$?” 在 perlvms 中了解详细信息。
· “File::Copy”现在可以检测 VMS 上的 Unix 兼容模式。
云层 VOS
· 合并了来自 Stratus 的各种更改。
塞班
· 现在支持Symbian S60 3.2 SDK 和S60 5.0 SDK。
Windows
· Perl 5.12 支持 Windows 2000 及更高版本。 旧版本的支持代码
的 Windows 仍然包含在内,但将在下一个开发过程中删除
周期。
· 现在可以使用 MinGW-w64 构建 Perl 的初始支持。
· perl.exe所在 现在包括一个清单资源来指定“trustInfo”设置
Windows Vista 及更高版本。 如果没有这个设置,Windows 会处理 perl.exe所在 作为一个
遗留应用程序并应用各种启发式方法,例如将访问重定向到
受保护的文件系统区域(如“Program Files”文件夹)给用户
“VirtualStore”而不是生成正确的“权限被拒绝”错误。
清单资源还请求 Microsoft Common-Controls 6.0 版
(Windows XP 中引入的主题控件)。 查看 Win32::VisualStyles
CPAN 上的模块切换回旧风格的无主题控件
领域广泛应用,提供了卓越的解决方案。
· “-t”文件测试操作符现在只在文件句柄连接到
一个控制台窗口。 在以前的 Perl 版本中,它会为所有人返回 true
字符模式设备,包括 NUL 和 LPT1.
· "-p" 文件测试操作符现在可以正常工作,并且 Fcntl::S_IFIFO 常量是
在使用 Microsoft Visual C 编译 Perl 时定义。在以前的 Perl 版本中
“-p”总是返回一个假值,并且 Fcntl::S_IFIFO 常量不是
定义。
此错误特定于 Microsoft Visual C,从未影响构建的 Perl 二进制文件
与 MinGW。
· 现在更广泛地支持套接字错误代码:POSIX 模块将
定义符号名称,如 POSIX::EWOULDBLOCK,以及套接字的字符串化
$! 中的错误代码现在也能用;
C:\>perl -MPOSIX -E "$!=POSIX::EWOULDBLOCK; 说 $!"
无法立即完成非阻塞套接字操作。
· 群() 现在将在 $! 中设置合理的错误代码。 以前的 Perl 版本已复制
$^E 的值变成了 $!,这引起了很多混乱。
· 选择() 现在更正确地支持所有空的“fd_set”。
· '.\foo' 和 '..\foo' 与 './foo' 和 '../foo' 被“do”区别对待
和“需要”[RT #63492]。
· 改进的消息窗口处理意味着“警报”和“杀死”消息将不会
在竞争条件下不再被丢弃。
· Perl 的构建基础结构的各种位不再转换为 win32 行
在发布时结束。 如果这对您造成伤害,请报告问题
perl 附带的 perlbug 程序。
已知的 问题
这是一些重要的未修复错误的列表,它们是 5.10.x 的回归
或 5.8.x。
· 如果有正常运行的文件,一些 CPANPLUS 测试可能会失败 ../../cpanp-运行-perl
在您的构建目录之外。 失败不应该意味着有问题
实际功能软件。 该错误已在 [RT #74188] 中修复并已安排
包含在 perl-v5.12.1 中。
· "List::Util::first" 在出现词法 $_ 时行为异常(通常引入
通过“我的 $_”或隐含地通过“给定”)。 为每次迭代设置的变量
是包变量 $_,而不是词法 $_ [RT #67694]。
类似的问题可能会出现在其他提供带块功能的模块中
作为他们的第一个论点,比如
foo { ... $_ ...} 列表
· 与子线程相比,某些正则表达式在子线程中运行可能会慢得多
线程模式被编译成 [RT #55600]。
· 会出现诸如“"\N{LATIN SMALL LIGATURE FF}" =~ /\N{LATIN SMALL LETTER F}+/”之类的东西
当他们进入一个很长的运行循环时挂起 [RT #72998]。
· 一些搬运工报告了在运行 Perl 的整个测试套件时神秘的崩溃
在某些 Windows 2000 系统上构建之后。 手动运行时,各个测试
据报道工作正常。
勘误表
· 这个其实是5.10.0引入的一个改动,但是在那里面漏掉了
版本的 perldelta,所以这里提到它。
与处理“/m”修饰符和“qr”相关的错误修正导致
5.8.x 和 5.10.0 之间的行为:
# 在 5.8.x 中匹配,在 5.10.0 中不匹配
$re = qr/^bar/; "foo\nbar" =~ /$re/m;
致谢
Perl 5.12.0 代表自 Perl 5.10.0 和
包含来自 750,000 多名作者的 3,000 多个文件中的 200 多行更改和
提交者。
由于充满活力的用户社区,Perl 继续蓬勃发展到它的第三个十年
和开发商。 已知以下人员贡献了以下改进:
成为 Perl 5.12.0:
亚伦·克兰、阿比·蒂默曼、阿比吉特·梅农-森、阿比盖尔、亚当·拉塞尔、阿德里亚诺·费雷拉、
AEvar Arnfjoer` Bjarmason,Alan Grover,Alexandr Ciornii,Alex Davies,Alex Vandiver,
安德烈亚斯·柯尼格、安德鲁·罗德兰、 [email protected],安迪·阿姆斯特朗,安迪·多尔蒂,何塞
奥古斯特-艾蒂安、本杰明·史密斯、本·莫罗、巴拉尼·拉斯纳、博·博格森、博·林德伯格、
布拉德·吉尔伯特、布拉姆、布伦丹·奥戴、布莱恩·德·福伊、查尔斯·贝利、奇普·萨尔森伯格、克里斯
“宾果游戏”威廉姆斯、克里斯托夫·兰普雷希特、克里斯·威廉姆斯、半音阶、克拉斯·雅各布森、克雷格
A. Berry、Dan Dascalescu、Daniel Frederick Crisman、Daniel M. Quinlan、Dan Jacobson、Dan
Kogai、戴夫·米切尔、戴夫·罗尔斯基、大卫·坎特雷尔、大卫·迪克、大卫·戈尔登、大卫
米切尔、大卫 M. Syzdek、大卫尼科尔、大卫惠勒、丹尼斯卡尔塞梅克、丁特尔曼、
Peter, Dominic Dunlop, Dr.Ruud, Duke Leto, Enrico Sorcinelli, Eric Brine, 父亲
Chrysostomos, 弗洛里安·拉格维茨, 弗兰克·韦根, Gabor Szabo, 吉恩·沙利文, Geoffrey T.
Dairiki、George Greer、Gerard Goossen、Gisle Aas、Goro Fuji、Graham Barr、Green、Paul、
Hans Dieter Pearcey、Harmen、H. Merijn Brand、Hugo van der Sanden、Ian Goodacre、Igor
萨顿、英戈·韦恩霍尔德、詹姆斯·本斯、詹姆斯·马斯特罗斯、扬·杜波依斯、贾里·阿尔托、贾科
海塔涅米、杰伊·汉娜、杰瑞·海登、杰西·文森特、吉姆·克罗米、乔迪·贝尔卡、约翰·E。
Malmberg, John Malmberg, John Peacock, John Peacock 来自 RT, John P. Linderman, John
赖特、乔什·本·乔尔、乔斯·I·布曼斯、卡尔·威廉姆森、石垣健一、肯·威廉姆斯、
凯文·布林特纳尔、凯文·莱德、库尔特·斯塔西尼克、里昂·布罗卡德、卢博米尔·林特尔、卢克·罗斯、
马塞尔·格鲁瑙尔、马库斯·霍兰德-莫里茨、马克·杰森·多米纳斯、马尔科·阿斯普兰德、马丁·哈施、
马什拉布·库瓦托夫、马特·克拉伊、马特·S·特劳特、麦克斯·麦舍因、迈克尔·布林、迈克尔·卡特梅尔、
迈克尔·G·施文、迈克尔·维滕、迈克·吉鲁、米洛什·坦斯基、莫里茨·伦茨、尼古拉斯
克拉克、尼克·克莱顿、尼科·泰尼、奥弗·凯伊、奥斯瓦尔多·比利亚隆、保罗·芬威克、保罗·加博里特、
保罗·格林、保罗·约翰逊、保罗·马奎斯、菲利普·哈泽尔、菲利普·布鲁哈特、拉斐尔·加西亚-
苏亚雷斯、雷纳·塔默、拉杰什·曼达莱姆拉、雷尼·厄本、蕾妮·贝克、里卡多·西涅斯、
里卡多·辛恩斯、理查德·弗利、里奇·劳恩赞、里克·德莱尼、里斯托·坎库宁、罗伯特·梅、
罗伯托·C·桑切斯、罗宾·巴克、贞弘智之、萨尔瓦多·奥尔蒂斯·加西亚、山姆·维兰、
斯科特·兰宁、塞巴斯蒂安·阿佩吉斯-特拉莫尼、小塞尔吉奥·杜里根、什洛米·菲什、西蒙
“核心代码”舒伯特、西西弗斯、斯拉文·雷齐克、史迈勒斯、史蒂芬·穆勒、史蒂芬·乌尔里希、
Stepan Kasal、Steve Hay、Steven Schubiger、Steve Peters、Tels、The Doctor、Tim Bunce、Tim
詹尼斯、托德·里纳尔多、汤姆·克里斯蒂安森、汤姆·胡金斯、汤姆·怀恩特、托尼·库克、托尔斯滕
舍恩菲尔德、泰伊·麦昆、瓦迪姆·科诺瓦洛夫、文森特·皮特、山岛日雄、松本康弘、
Yitzchak Scott-Thoennes、Yuval Kogman、Yves Orton、Zefram、Zsban Ambrus
这是非常不完整的,因为它是从版本控制历史记录中自动生成的。
特别是,它不包括(非常感谢)贡献者的姓名
谁报告了以前版本的 Perl 中的问题,这些问题有助于使 Perl 5.12.0 更好。 为了
所有 Perl 历史贡献者的更完整列表,请参阅“作者”
Perl 5.12.0 发行版中的文件。
我们“退休”的南瓜王尼古拉斯·克拉克和拉斐尔·加西亚-苏亚雷斯值得特别感谢
他们杰出而实质性的持续贡献。 尼古拉斯亲自撰写了
自 30 以来 5.10.0% 的补丁。 Rafael 以 11% 的补丁作者排名第二,但
首先是在提交由其他人编写的补丁方面遥遥领先,推动了 44% 的
自 5.10.0 以来在此类别中提交,通常在为
补丁作者。 这些统计数据绝不包括他们的所有贡献,而是表达了
简而言之,如果没有他们,我们就无法做到。
此版本中包含的许多更改源自包含在
Perl 的核心。 我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。
报告仪表板 错误
如果你发现你认为是一个错误,你可以查看最近发布到
comp.lang.perl.misc 新闻组和 perl 错误数据库位于http://rt.perl.org/perlbug/>.
也可能有资料http://www.perl.org/>,Perl 主页。
如果您认为有未报告的错误,请运行 错误 程序包含在
你的释放。 确保将您的错误缩减为一个很小但足够的测试用例。 你的错误
报告,连同“perl -V”的输出,将被发送到 [email protected] 成为
由 Perl 移植团队分析。
如果您报告的错误具有安全隐患,因此不适合
发送到公开存档的邮件列表,然后请将其发送至
[email protected]. 这指向关闭订阅未归档邮件
列表,其中包括所有核心提交者,他们将能够帮助评估影响
问题,找出解决方案,并帮助协调补丁的发布
在支持 Perl 的所有平台上缓解或修复问题。 请只
将此地址用于 Perl 核心中的安全问题,而不是单独用于模块
分布在 CPAN 上。
使用 onworks.net 服务在线使用 perl5120delta
