perl5120delta - perl v5.12.0 的新增功能
本文档描述了 5.10.0 版本和 5.12.0 版本之间的差异。
5.12.0 中的许多错误修复已包含在 5.10.1 维护版本中。
您可以在 5.10.1 发行说明 (perl5101delta) 中查看这些更改的列表。
package NAME VERSION
语法此新语法允许模块作者在使用 'package' 声明命名空间时设置命名空间的 $VERSION。它消除了对 our $VERSION = ...
和类似构造的需要。例如
package Foo::Bar 1.23;
# $Foo::Bar::VERSION == 1.23
这有几个优点
$VERSION
的解析方式与 use NAME VERSION
完全相同
$VERSION
在编译时设置
$VERSION
是一个版本对象,它提供了对比较运算符的正确重载,因此将 $VERSION
与十进制 (1.23) 或点分十进制 (v1.2.3) 版本号进行比较可以正常工作。
消除了 $VERSION = ...
和 eval $VERSION
混乱
由于它要求 VERSION 是一个数字文字或 v 字符串文字,因此它可以由工具链模块静态解析,而无需像 MM->parse_version 对 $VERSION = ...
那样进行 eval
仅使用package NAME
不会破坏旧代码,但使用package NAME VERSION
的代码需要限制在 Perl 5.12.0 或更高版本。这类似于将open
从两个参数更改为三个参数。需要最新 Perl 的用户将受益,并且可能在几年后,它将成为标准做法。
但是,package NAME VERSION
需要一种新的“严格”版本号格式。有关详细信息,请参阅"版本号格式"。
...
运算符添加了一个新的运算符...
,绰号为 Yada Yada 运算符。它旨在标记尚未实现的占位符代码。请参阅"perlop 中的 Yada Yada 运算符"。
使用use VERSION
语法和大于或等于 5.11.0 的版本号将在词法上启用严格,就像use strict
一样(除了启用功能)。以下
use 5.12.0;
意味着
use strict;
use feature ':5.12';
Perl 5.12 附带 Unicode 5.2,这是我们在发布时可用的最新版本。此版本的 Unicode 于 2009 年 10 月发布。有关此版本标准中更改内容的更多详细信息,请参阅http://www.unicode.org/versions/Unicode5.2.0。有关安装和使用其他版本的 Unicode 的说明,请参阅perlunicode。
此外,Perl 的开发人员已显着改进了 Perl 的 Unicode 实现。有关完整详细信息,请参阅下面的"Unicode 大修"。
Perl 的核心时间相关函数现在与 Y2038 兼容。(这对您来说可能意义不大,但您的孩子会喜欢它!)
现在可以重载qr//
运算符,即转换为正则表达式,就像以前可以重载转换为对象的布尔值、字符串或数字一样。当对象出现在=~
运算符的右侧或被插入正则表达式时,它会被调用。请参阅overload。
扩展模块现在可以干净地挂接到 Perl 解析器以定义新的关键字引导表达式和复合语句类型。关键字后的语法完全由扩展定义。这允许完全非 Perl 子语言被内联解析,并生成正确的操作。
有关机制,请参阅 "perlapi 中的 PL_keyword_plugin"。Perl 核心源代码分发版还包含一个新的模块 XS::APItest::KeywordRPN,它通过可插拔关键字实现逆波兰表达式算术。此模块主要用于测试目的,通常不会安装,但也可以作为使用新机制的示例。
Perl 开发人员认为此功能是实验性的。我们可能会在 Perl 5.14 中将其删除或以不向后兼容的方式更改。
词法分析器的最低层和部分垫系统现在对 XS 扩展提供了 C API。这些是支持正确使用可插拔关键字所必需的,但也具有其他用途。新的 API 是实验性的,并且只涵盖了在这些领域充分利用核心功能所需内容的一小部分。目的是在 Perl 5.13 开发周期中添加一系列完整的、受支持的接口。
Perl 开发人员认为此功能是实验性的。我们可能会在 Perl 5.14 中将其删除或以不向后兼容的方式更改。
当扩展模块挂钩 rv2cv 操作的创建以修改子例程查找过程时,这现在对裸字子例程调用有效。这意味着对以这种方式引用的子例程的原型将被正确处理。(以前,裸字子例程名称最初是通过不可挂钩的机制查找的,用于解析目的,因此扩展只能适当地影响带有 `&` 符号的子例程名称。)
从 Perl 5.12.0 开始,有一个新的接口用于插入和使用除默认线性深度优先搜索之外的方法解析顺序。在 5.10.0 中添加的 C3 方法解析顺序已作为插件重新实现,而没有更改其 Perl 空间接口。有关更多信息,请参阅 perlmroapi。
\N
实验性正则表达式转义Perl 现在支持 \N
,这是一种新的正则表达式转义,您可以将其视为 \n
的反义词。它将匹配任何不是换行符的字符,独立于单行匹配修饰符 /s
的存在与否。它不能在字符类中使用。\N{3}
表示匹配 3 个非换行符;\N{5,}
表示匹配至少 5 个。\N{NAME}
仍然表示名为 NAME
的字符或序列,但 NAME
不再可以是 3
或 5,
之类的东西。
这将破坏一个 自定义 charnames 翻译器,它允许使用数字作为字符名称,因为 \N{3}
现在将表示匹配 3 个非换行符字符,而不是名称为 3
的字符。(Unicode 标准定义的名称不是数字,因此只有自定义翻译器可能会受到影响。)
Perl 开发人员对可能与现有的 \N{...}
结构(通过其 Unicode 名称匹配字符)造成用户混淆感到担忧。因此,此功能是实验性的。我们可能会在 Perl 5.14 中将其删除或以不向后兼容的方式更改。
Perl 现在对 DTrace 提供了一些支持。请参阅 INSTALL 中的“DTrace 支持”。
configure_requires
的支持CPAN
和 CPANPLUS
现在都支持 META.yml 元数据文件中 configure_requires
关键字,该文件包含在大多数最新的 CPAN 发行版中。这允许发行版作者指定在运行 Makefile.PL 或 Build.PL 之前必须安装的配置先决条件。
有关在为 CPAN 创建发行版时如何指定 configure_requires
的更多信息,请参阅 ExtUtils::MakeMaker
或 Module::Build
的文档。
each
、keys
、values
现在更加灵活each
、keys
、values
函数现在可以对数组进行操作。
when
作为语句修饰符when
现在可以作为语句修饰符使用。
$,
灵活性变量 $,
现在可以被绑定。
// 在 when 子句中现在表现得像 || 一样
您现在可以从 PERL5OPT
环境变量中设置 -W
delete local
delete local
现在允许您在本地删除哈希条目。
抽象命名空间套接字是 Linux 特定的套接字类型,它们存在于 AF_UNIX 族中,略微滥用它以能够使用任意字符数组作为地址:它们以空字节开头,不以空字节结尾,而是以传递给 socket() 系统调用的长度结尾。
substr
参数的 32 位限制现已移除。现在,系统有符号和无符号整数的完整范围可用于 pos
和 len
参数。
多年来,Perl 的开发者出于各种原因弃用了一些语言特性。Perl 现在默认情况下会在使用弃用语言特性时发出警告。Perl 现在警告你的许多弃用特性已经弃用了很多年。你可以在对应版本的 perl5xxdelta.pod
文件中找到特定 Perl 版本中弃用内容的列表。
要在给定的词法范围内禁用此功能,你应该使用 no warnings 'deprecated';
。有关哪些语言特性已弃用以及各种弃用警告的解释,请参阅 perldiag。有关 Perl 开发者在此版本中弃用的功能和模块列表,请参阅下面的 "弃用"。
可接受的版本号格式已正式化为“严格”和“宽松”规则。package NAME VERSION
采用严格的版本号。UNIVERSAL::VERSION
和 version 对象构造函数采用宽松的版本号。提供无效的版本将导致致命错误。use NAME VERSION
中的版本参数首先被解析为数字字面量或 v 字符串,然后传递给 UNIVERSAL::VERSION
(并且必须通过“宽松”格式测试)。
这些格式在 version 模块中进行了全面记录。简单来说,“严格”版本号是一个正十进制数(整数或十进制小数),不包含指数运算,或者是一个带前导 'v' 字符且至少包含三个组件的点分十进制 v 字符串。“宽松”版本号允许包含少于三个组件或没有前导 'v' 的 v 字符串。在“宽松”规则下,十进制和点分十进制版本都可以在小数部分或点分十进制部分之后使用下划线字符分隔一个尾随的“alpha”组件。
version 模块添加了 version::is_strict
和 version::is_lax
函数来根据这些规则检查标量。
在 @INC
中,ARCHLIB
和 PRIVLIB
现在出现在当前版本的 site_perl
和 vendor_perl
之后。安装在 site_perl
和 vendor_perl
中的模块现在将优先于安装在 ARCHLIB
和 PRIVLIB
中的模块加载。
在内部,Perl 现在将编译后的正则表达式(例如使用 qr//
创建的正则表达式)视为一等公民。序列化、反序列化或以其他方式与 Perl 内部数据结构进行深度交互的 Perl 模块需要针对此更改进行更新。截至撰写本文时,大多数受影响的 CPAN 模块已更新。
given
/when
switch 语句比 Perl 5.10.0 更擅长处理复杂语句(这些增强功能在 5.10.1 及后续的 5.10 版本中也可用)。在两种新情况下,when
现在将它的参数解释为布尔值,而不是用于智能匹配的表达式。
..
和 ...
翻转操作符现在在布尔上下文中进行评估,遵循它们通常的语义;请参阅 "perlop 中的范围操作符"。
请注意,与 perl 5.10.0 一样,when (1..10)
不会用于测试给定值是否为 1 到 10 之间的整数;您应该使用 when ([1..10])
代替(注意数组引用)。
但是,与 5.10.0 相反,在布尔上下文中评估翻转操作符确保它现在可以在 when()
中有用,特别是用于实现双稳态条件,例如在
when (/^=begin/ .. /^=end/) {
# do something
}
涉及定义或操作符的复合表达式,如 when (expr1 // expr2)
,如果第一个表达式是布尔值,则将被视为布尔值。(这只是扩展了适用于常规或操作符的现有规则,如 when (expr1 || expr2)
。)
自 Perl 5.10.0 以来,Perl 的开发人员对智能匹配操作符进行了一些更改。当然,这些也会改变 switch 语句的行为,其中隐式使用智能匹配。这些更改也针对 5.10.1 版本进行了,并将保留在后续的 5.10 版本中。
智能匹配操作符 ~~
不再是可交换的。智能匹配的行为现在主要取决于其右侧参数的类型。此外,它的语义在几个情况下进行了调整,以提高一致性或实用性。虽然总体向后兼容性得以保留,但必须注意几个更改。
不再对具有空原型的代码引用进行特殊处理。它们像其他代码引用一样被传递一个参数(即使它们选择忽略它)。
%hash ~~ sub {}
和 @array ~~ sub {}
现在测试子例程是否为哈希的每个键(或数组的每个元素)返回一个真值,而不是将整个哈希或数组作为引用传递给子例程。
由于交换律的破坏,代码引用在出现在 ~~
运算符左侧时不再被特殊对待,而是像任何普通标量一样。
undef ~~ %hash
始终为假(因为 undef
不能是哈希中的键)。不会进行隐式转换为 ""
(如 perl 5.10.0 中的情况)。
$scalar ~~ @array
现在始终将智能匹配分布到数组的元素中。如果 @array
中的一个元素验证了 $scalar ~~ $element
,则为真。这是对旧行为的概括,该行为测试数组是否包含标量。
智能匹配运算符的完整调度表在 "perlsyn 中的智能匹配详解" 中给出。
根据基于最右侧参数类型的调度规则,当重载 ~~
的对象出现在运算符的右侧时,将始终调用重载例程(第三个参数设置为真值,请参见 overload)。但是,当对象出现在左侧时,只有当最右侧参数是简单标量时才会调用重载例程。这样,智能匹配在数组上的分布性就不会被破坏,以及其他复杂类型(代码引用、哈希、正则表达式)的行为。因此,智能匹配重载例程的编写者主要只需要担心与标量的比较,以及可能与字符串化的重载;其他常见情况将自动一致地处理。
~~
现在将拒绝对未重载它的对象进行操作(为了避免依赖于对象的底层结构)。(但是,如果对象重载了字符串化或数字化运算符,并且如果重载回退处于活动状态,它将像往常一样使用。)
许多 Unicode 属性的定义已更改为与当前 Unicode 标准的定义相匹配。这些在上面 "Unicode 大修" 下列出。此更改可能会破坏期望旧定义的代码。
boolkeys 操作已移至哈希操作组。这会破坏二进制兼容性。
文件句柄现在始终被祝福到 IO::File
中。
以前的行为是,如果 FileHandle 被加载到内存中,则将其祝福到 FileHandle(一个空的代理类),否则将其祝福到 IO::Handle
中。
use feature :5.10*
的语义略有变化。有关更多信息,请参见 "模块和语义"。
Perl 的开发人员现在使用 git 而不是 Perforce。这应该是一个纯粹的内部变化,只与积极参与核心开发的人员相关。但是,您可能会看到 perl 由于此更改而产生细微的差异。例如,在 perl -V
输出的某些细节中。有关更多信息,请参见 perlrepository。
作为 Test::Harness
2.x 到 3.x 升级的一部分,实验性的 Test::Harness::Straps
模块已被删除。有关更多详细信息,请参见 "模块和语义"。
作为 ExtUtils::MakeMaker
升级的一部分,ExtUtils::MakeMaker::bytes
和 ExtUtils::MakeMaker::vmsish
模块已从此发行版中删除。
Module::CoreList
不再包含 %:patchlevel
哈希。
length undef
现在返回 undef。
不支持的私有 C API 函数现在被声明为“static”,以防止泄漏到 Perl 的公共 API。
为了支持引导过程,miniperl 不再在正则表达式引擎中构建 UTF-8 支持。
这允许构建在设置了 PERL_UNICODE 和 UTF-8 本地化的情况下完成。如果没有它,就会出现引导问题,因为 miniperl 无法加载正则表达式引擎的 UTF-8 组件,因为它们尚未构建。
miniperl 的 @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 解析器的意外情况意味着这些结构都是等效的
my $pi := 4;
my $pi : = 4;
my $pi : = 4;
其中:
被视为属性列表的开始,该列表在=
之前结束。由于此处空格不重要,因此所有这些都被解析为一个空属性列表,因此以上所有内容都等效于,并且最好写成
my $pi = 4;
因为对空列表不进行任何属性处理。
照此,这意味着:=
不能用作新标记,而不会在不改变现有代码含义的情况下静默地改变其含义。因此,该特定形式现在已弃用,并将成为语法错误。如果绝对有必要使用空属性列表(例如,由于代码生成器),则在=
之前添加一个空格以避免警告。
UNIVERSAL->import()
方法UNIVERSAL->import()
现在已弃用。尝试将导入参数传递给use UNIVERSAL
语句将导致弃用警告。
现在已弃用使用goto
从外部作用域跳转到内部作用域。这种罕见的用例在作用域实现中造成了问题。
\N{name}
中的自定义字符名称,看起来不像名称在\N{name}
中,name可以是几乎任何东西。标准 Unicode 名称具有非常有限的域,但自定义名称转换器可以创建名称,例如,完全由标点符号组成。现在已弃用创建不以字母字符开头,并且不是字母数字或不包含除少数其他字符(即空格、连字符、括号和冒号)以外的其他字符的名称。由于\N
的附加含义(参见"\N" 实验性正则表达式转义
),看起来像花括号括起来的量词的名称将不起作用。例如,\N{3,4}
现在表示匹配 3 到 4 个非换行符;之前可以创建自定义名称3,4
。
以下模块将在未来版本中从核心发行版中删除,应从 CPAN 安装。CPAN 上需要这些模块的发行版应将它们添加到其先决条件中。这些模块的内核版本将发出弃用警告。
如果您发布了 Perl 的打包版本,无论是单独发布还是作为更大系统的一部分,那么您应该仔细考虑核心模块弃用的影响。您可能需要考虑将 Perl 的默认构建与一些或所有已弃用模块的包一起发布,这些包安装到vendor
或site
Perl 库目录中。这将抑制弃用警告。
或者,您可能需要考虑修补lib/deprecate.pm以提供特定于您的打包系统或 Perl 发行版的弃用警告,与您的打包系统或发行版如何管理从单个包提供给定功能的版本到系统管理员需要知道安装多个包以获得相同功能的更高版本的阶段性过渡一致。
您可以通过从 CPAN 安装相关模块来消除这些弃用警告。要安装所有模块的最新版本,只需安装 Task::Deprecations::5_12
。
Switch 有 bug,应该避免使用。您可能会发现 Perl 的新 given
/when
功能是一个合适的替代方案。有关更多信息,请参阅 "perlsyn 中的 Switch 语句"。
Perl_pmflag
不再是 Perl 公共 API 的一部分。现在调用它会生成弃用警告,并且将在将来的版本中删除。虽然列为 API 的一部分,但它从未被记录,并且仅在 toke.c 中使用,并且在 5.10 之前,在 regcomp.c 中使用。在核心代码中,它已被静态函数替换。
termcap.pl、tainted.pl、stat.pl、shellwords.pl、pwd.pl、open3.pl、open2.pl、newgetopt.pl、look.pl、find.pl、finddepth.pl、importenv.pl、hostname.pl、getopts.pl、getopt.pl、getcwd.pl、flush.pl、fastcwd.pl、exceptions.pl、ctime.pl、complete.pl、cacheout.pl、bigrat.pl、bigint.pl、bigfloat.pl、assert.pl、abbrev.pl、dotsh.pl 和 timelocal.pl 现在都已弃用。早些时候,Perl 的开发人员打算在 5.14.0 版本中从 Perl 的核心代码中删除这些库。
在 5.12.0 版本发布前的最终测试中,一些开发者发现当前生产代码使用了这些古老的库,其中一些位于 Perl 核心本身。因此,pumpking 允许它们继续使用。它们将在 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 定义的属性和属性值的同义词。
qr/\X/
匹配 Unicode 逻辑字符,已被扩展以更好地与各种亚洲语言配合使用。它现在被定义为一个 *扩展字形簇*。(参见 http://www.unicode.org/reports/tr29/)。以前匹配的任何内容,只要有意义,都会继续被接受。此外
\X
不会拆分 CR LF
序列。
\X
现在将匹配包含 ZWJ
和 ZWNJ
字符的序列。
\X
现在将始终匹配至少一个字符,包括初始标记。标记通常出现在基字符之后,但在 Unicode 中,它们也可能单独存在,\X
现在将处理这种情况,例如在一行的开头或 ZWSP
之后。而这正是 \X
不再匹配以前没有意义的那些内容的地方。例如,以前,你可能会遇到一个没有意义的带重音的 LF。
\X
现在将匹配(韩语)韩文字节序列,以及泰语和老挝语的例外情况。
否则,对于不受影响的语言,此更改应该是透明的。
\p{...}
使用 Canonical_Combining_Class 属性进行匹配在之前的 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 的定义包含了一些实际上不是字母的东西(所有标记),同时省略了许多实际上是字母的东西。\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:全角数字零。
数字类型属性已扩展到包括统一汉字。
有一个新的 Perl 扩展,即“Present_In”或简称为“In”属性。这是 Unicode Age 属性的扩展,但 \p{In=5.0}
匹配任何在 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
autodie
是 Fatal
模块的一种新的词法作用域替代方案。捆绑版本为 2.06_01。请注意,在此版本中,当 autodie
生效时使用字符串 eval 会导致 autodie 行为泄漏到周围作用域。有关更多详细信息,请参阅 "autodie 中的错误"。
版本 2.06_01 已添加到 Perl 核心。
Compress::Raw::Bzip2
版本 2.024 已添加到 Perl 核心。
overloading
overloading
允许您在词法作用域内禁用或启用某些或所有操作的重载。
版本 0.001 已添加到 Perl 核心。
parent
parent
在编译时与基类建立 ISA 关系。它提供了 base
的关键功能,而不会产生其他不必要的行为。
版本 0.223 已添加到 Perl 核心。
Parse::CPAN::Meta
版本 1.40 已添加到 Perl 核心。
VMS::DCLsym
版本 1.03 已添加到 Perl 核心。
VMS::Stdio
版本 2.4 已添加到 Perl 核心。
XS::APItest::KeywordRPN
Perl 核心已添加版本 0.003。
base
从版本 2.13 升级到 2.15。
bignum
从版本 0.22 升级到 0.23。
charnames
charnames
现在包含 Unicode NameAliases.txt 数据库文件。这将添加一些额外的 \N
字符名称,这些名称以前无法识别;例如,"\N{LATIN CAPITAL LETTER GHA}"
。
从版本 1.06 升级到 1.07。
constant
从版本 1.13 升级到 1.20。
diagnostics
diagnostics
现在内部支持 %.0f 格式化。
diagnostics
不再抑制 Use of uninitialized value in range (or flip)
警告。[perl #71204]
从版本 1.17 升级到 1.19。
feature
在 feature
中,:5.10
和 :5.10.X
特性包的含义略有变化。最后一个组件(如果有)(即 X
)将被简单地忽略。这是基于这样的假设:新特性通常不会添加到维护版本中。因此,:5.10
和 :5.10.X
具有相同的效果。这是对 5.10.0 文档中行为的更改。
feature
现在包含 unicode_strings
特性
use feature "unicode_strings";
此语义为不设置内部 UTF-8 标志但包含 128 到 255 之间的单字节字符的字符串的区分大小写操作(uc
、lc
、ucfirst
、lcfirst
)启用 Unicode 语义。
从版本 1.11 升级到 1.16。
less
less
现在包含 stash_name
方法,允许 less
的子类选择在 %^H 中存储其存储的位置。
从版本 0.02 升级到 0.03。
lib
从版本 0.5565 升级到 0.62。
mro
mro
现在作为 XS 扩展实现。文档化的接口没有改变。依赖于某些 mro::
方法始终可用的实现细节的代码可以“保留两部分”。
从版本 1.00 升级到 1.02。
overload
overload
现在允许对 'qr' 进行重载。
从版本 1.06 升级到 1.10。
threads
从版本 1.67 升级到 1.75。
从版本 1.14 升级到 1.32。
version
version
现在支持 "版本号格式",如本文档前面和其自身文档中所述。
从版本 0.74 升级到 0.82。
warnings
warnings
有一个新的 warnings::fatal_enabled()
函数。它还包含一个新的 illegalproto
警告类别。有关此更改,另请参见 "新的或更改的诊断"。
从版本 1.06 升级到 1.09。
Archive::Extract
从版本 0.24 升级到 0.38。
Archive::Tar
从版本 1.38 升级到 1.54。
Attribute::Handlers
从版本 0.79 升级到 0.87。
AutoLoader
从版本 5.63 升级到 5.70。
B::Concise
从版本 0.74 升级到 0.78。
B::Debug
从版本 1.05 升级到 1.12。
B::Deparse
从版本 0.83 升级到 0.96。
B::Lint
从版本 1.09 升级到 1.11_01。
CGI
从版本 3.29 升级到 3.48。
Class::ISA
从版本 0.33 升级到 0.36。
注意:Class::ISA
已弃用,可能会从 Perl 的未来版本中删除。
Compress::Raw::Zlib
从版本 2.008 升级到 2.024。
CPAN
从版本 1.9205 升级到 1.94_56。
CPANPLUS
从版本 0.84 升级到 0.90。
CPANPLUS::Dist::Build
从版本 0.06_02 升级到 0.46。
Data::Dumper
从版本 2.121_14 升级到 2.125。
DB_File
从版本 1.816_1 升级到 1.820。
Devel::PPPort
从版本 3.13 升级到 3.19。
Digest
从版本 1.15 升级到 1.16。
Digest::MD5
从版本 2.36_01 升级到 2.39。
Digest::SHA
从版本 5.45 升级到 5.47。
Encode
从版本 2.23 升级到 2.39。
Exporter
从版本 5.62 升级到 5.64_01。
ExtUtils::CBuilder
从版本 0.21 升级到 0.27。
ExtUtils::Command
从版本 1.13 升级到 1.16。
ExtUtils::Constant
从版本 0.2 升级到 0.22。
ExtUtils::Install
从版本 1.44 升级到 1.55。
ExtUtils::MakeMaker
从版本 6.42 升级到 6.56。
ExtUtils::Manifest
从版本 1.51_01 升级到 1.57。
ExtUtils::ParseXS
从版本 2.18_02 升级到 2.21。
File::Fetch
从版本 0.14 升级到 0.24。
File::Path
从版本 2.04 升级到 2.08_01。
File::Temp
从版本 0.18 升级到 0.22。
Filter::Simple
从版本 0.82 升级到 0.84。
Filter::Util::Call
从版本 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。
Locale::Maketext
从版本 1.12 升级到 1.14。
Locale::Maketext::Simple
从版本 0.18 升级到 0.21。
Log::Message
从版本 0.01 升级到 0.02。
Log::Message::Simple
从版本 0.04 升级到 0.06。
Math::BigInt
从版本 1.88 升级到 1.89_01。
Math::BigInt::FastCalc
从版本 0.16 升级到 0.19。
Math::BigRat
从版本 0.21 升级到 0.24。
Math::Complex
从版本 1.37 升级到 1.56。
Memoize
从版本 1.01_02 升级到 1.01_03。
MIME::Base64
从版本 3.07_01 升级到 3.08。
Module::Build
从版本 0.2808_01 升级到 0.3603。
Module::CoreList
从版本 2.12 升级到 2.29。
Module::Load
从版本 0.12 升级到 0.16。
Module::Load::Conditional
从版本 0.22 升级到 0.34。
Module::Loaded
从版本 0.01 升级到 0.06。
Module::Pluggable
从版本 3.6 升级到 3.9。
Net::Ping
从版本 2.33 升级到 2.36。
NEXT
从版本 0.60_01 升级到 0.64。
Object::Accessor
从版本 0.32 升级到 0.36。
Package::Constants
从版本 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::Simple
从版本 3.05 升级到 3.13。
Safe
从版本 2.12 升级到 2.22。
SelfLoader
从版本 1.11 升级到 1.17。
Storable
从版本 2.18 升级到 2.22。
Switch
从版本 2.13 升级到 2.16。
注意:Switch
已被弃用,可能会从 Perl 的未来版本中删除。
Sys::Syslog
从版本 0.22 升级到 0.27。
Term::ANSIColor
从版本 1.12 升级到 2.02。
Term::UI
从版本 0.18 升级到 0.20。
Test
从版本 1.25 升级到 1.25_02。
Test::Harness
从版本 2.64 升级到 3.17。
Test::Simple
从版本 0.72 升级到 0.94。
Text::Balanced
从版本 2.0.0 升级到 2.02。
Text::ParseWords
从版本 3.26 升级到 3.27。
Text::Soundex
从版本 3.03 升级到 3.03_01。
Thread::Queue
从版本 2.00 升级到 2.11。
Thread::Semaphore
从版本 2.01 升级到 2.09。
Tie::RefHash
从版本 1.37 升级到 1.38。
Time::HiRes
从版本 1.9711 升级到 1.9719。
Time::Local
从版本 1.18 升级到 1.1901_01。
Time::Piece
从版本 1.12 升级到 1.15。
Unicode::Collate
从版本 0.52 升级到 0.52_01。
Unicode::Normalize
从版本 1.02 升级到 1.03。
Win32
从版本 0.34 升级到 0.39。
Win32API::File
从版本 0.1001_01 升级到 0.1101。
XSLoader
从版本 0.08 升级到 0.10。
attrs
已从 Perl 核心移除。先前版本为 1.02。
CPAN::API::HOWTO
已从 Perl 核心移除。先前版本为 'undef'。
CPAN::DeferedCode
已从 Perl 核心移除。先前版本为 5.50。
CPANPLUS::inc
已从 Perl 核心移除。先前版本为 'undef'。
DCLsym
已从 Perl 核心移除。先前版本为 1.03。
ExtUtils::MakeMaker::bytes
已从 Perl 核心移除。先前版本为 6.42。
ExtUtils::MakeMaker::vmsish
已从 Perl 核心移除。先前版本为 6.42。
Stdio
已从 Perl 核心移除。先前版本为 2.3。
Test::Harness::Assert
已从 Perl 核心移除。先前版本为 0.02。
Test::Harness::Iterator
已从 Perl 核心移除。先前版本为 0.02。
Test::Harness::Point
已从 Perl 核心移除。先前版本为 0.01。
Test::Harness::Results
已从 Perl 核心移除。先前版本为 0.01。
Test::Harness::Straps
已从 Perl 核心移除。先前版本为 0.26_01。
Test::Harness::Util
已从 Perl 核心移除。先前版本为 0.01。
XSSymSet
已从 Perl 核心移除。先前版本为 1.1。
参见上面 "已弃用的模块"。
perlhaiku 包含有关如何为 Haiku 平台构建 perl 的说明。
perlmroapi 描述了可插拔方法解析顺序的新接口。
perlperf,由 Richard Foley 撰写,介绍了可用于 perl 程序的性能和优化技术的使用,并特别参考了这些技术。
perlrepository 描述了如何使用 git 版本控制系统访问 perl 源代码。
perlpolicy 将“关于贡献模块的社会契约”扩展到有关 Perl 移植策略的文档的开头。
各种大型 Changes* 文件(列出了过去 18 年对 perl 所做的所有更改)已被删除,并被一个名为 Changes 的小文件替换,该文件仅解释如何从 git 版本控制系统中提取相同的信息。
Porting/patching.pod 已被删除,因为它主要描述了与旧的基于 Perforce 的存储库的交互,该存储库现已过时。仍然相关的的信息已移至 perlrepository。
语法 unless (EXPR) BLOCK else BLOCK
现在被记录为有效,语法 unless (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
也是如此,尽管实际上使用后者可能不是您源代码可读性的最佳选择。
记录了 -X 重载。
记录了when()
对大多数文件测试操作符的特殊处理。
将when
记录为语法修饰符。
删除了“旧的 Perl 线程教程”,该教程描述了 5005 个线程。
pod/perlthrtut.pod 是为 ithreads 重做的相同材料。
更正之前的文档:v 字符串没有被弃用。
使用版本对象时,我们需要它们使用 MODULE VERSION 语法。此补丁删除了弃用通知。
安全联系信息现在是 perlsec 的一部分。
核心文档的很大一部分已更新,以澄清 Perl Unicode 处理的行为。
大部分剩余的核心文档已过审和编辑,以提高清晰度、语言使用的一致性,并修正 Tom Christiansen 姓名的拼写。
Pod 规范 (perlpodspec) 已更新,以使规范与大多数 Pod 系统已支持的现代用法保持一致。“begin/end”区域中的格式名称后面现在可以跟一个参数字符串。现在允许链接到带有文本描述的 URI。L<"section">
的用法已被标记为已弃用。
if.pm 已在 "perlfunc 中的 use" 中记录,作为一种方法,即使在 use
周围有隐式 BEGIN 块的情况下,也能实现模块的条件加载。
perlvar.pod 中 $1
的文档已澄清。
现在记录了 \N{U+code point}
。
新的内部缓存意味着 isa()
通常会更快。
C3
方法解析顺序的实现已优化 - 具有单一继承的类的线性化速度提高了 40%。多重继承的性能保持不变。
在 use locale
下,区域设置相关信息现在缓存在只读值上,例如 keys %hash
返回的列表。这使得在 use locale
范围内进行操作(例如 sort keys %hash
)的速度更快。
不再调用空 DESTROY
方法。
Perl_sv_utf8_upgrade()
现在更快。
空哈希上的 keys
现在更快。
if (%foo)
已优化,比 if (keys %foo)
更快。
字符串重复运算符 ($str x $num
) 在 $str
长度为 1 或 $num
很大时,现在速度快了几倍。
在空上下文(如 @a = reverse @a
)中将数组反转到自身,现在是在原地进行的,比以前快了好几个数量级。它还将尽可能保留不存在的元素,即对于非魔法数组或具有 EXISTS
和 DELETE
方法的绑定数组。
perlapi、perlintern、perlmodlib 和 perltoc 现在都在构建时生成,而不是作为发布的一部分提供。
如果 vendorlib
和 vendorarch
相同,则它们只会被添加到 @INC
一次。
如果 perl 使用 -Dusedevel
构建,则会定义 $Config{usedevel}
和 C 级别的 PERL_USE_DEVEL
。
Configure 将启用 -fstack-protector
的使用,以提供针对堆栈溢出攻击的保护,前提是编译器支持它。
Configure 现在将确定可重入函数和 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
。
作为 ext 平坦化的部分,所有平台上的所有扩展都由 make_ext.pl 构建。这将取代特定于 Unix 的 ext/util/make_ext、特定于 VMS 的 make_ext.com 和特定于 Win32 的 win32/buildext.pl。
每个版本的 Perl 都会进行大量内部更改,这些更改不会影响日常使用,但对于使用 Perl 源代码的开发人员来说可能仍然值得注意。
C 源文件开头的 J.R.R. 托尔金引文已得到检查,并添加了适当的引用,感谢 Tom Christiansen 的补丁。
传统上在 perl 源代码的 lib/ 和 ext/ 目录中找到的双重生命周期模块的内部结构已发生重大变化。在可能的情况下,双重生命周期模块已从 lib/ 和 ext/ 中提取。
由 Perl 开发人员维护的双重生命周期模块作为 Perl 核心的一部分现在位于 dist/ 中。主要在 CPAN 上维护的双重生命周期模块现在位于 cpan/ 中。在报告 cpan/ 下模块中的错误时,请将您的错误报告直接发送到模块的错误跟踪器或作者,而不是 Perl 的错误跟踪器。
\N{...}
现在编译得更好,始终强制使用 UTF-8 内部表示
Perl 开发人员修复了识别 \N{...}
结构的几个问题。作为此的一部分,perl 将以 UTF-8 格式存储其定义中包含 \N{name}
或 \N{U+code point}
的任何标量或正则表达式。(这在以前对于所有不使用自定义翻译器的 \N{name}
出现都是正确的,但现在始终如此。)
Perl_magic_setmglob 现在了解全局变量,修复了 RT #71254。
SVt_RV
不再存在。RV 现在存储在 IV 中。
Perl_vcroak()
现在接受一个空第一个参数。此外,对“非空”编译器注释进行了全面审计,并更正了几个其他内部函数的注释。
添加了新的宏 dSAVEDERRNO
、dSAVE_ERRNO
、SAVE_ERRNO
、RESTORE_ERRNO
以正式化 errno
变量的临时保存。
已添加函数 Perl_sv_insert_flags
以增强 Perl_sv_insert
。
已添加函数 Perl_newSV_type(type)
,等效于 Perl_newSV()
后跟 Perl_sv_upgrade(type)
。
已添加函数 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
快,PL_na
是对 ithreads 下解释器结构的指针解引用,否则是全局变量。
Perl_mg_free()
以前会将已释放的内存保留在标量上的 SvMAGIC()
可访问。现在它更新了链接列表,以在释放每个魔法时将其删除。
在 ithreads 下,PL_reg_curpm
中的正则表达式现在是引用计数的。这消除了许多处理它不是引用计数的 hackish 解决方法。
Perl_mg_magical()
有时会错误地打开 SvRMAGICAL()
。这已修复。
如果字符串值包含尾随“垃圾”,则不再设置public IV 和 NV 标志。此行为与值超出类型范围时不设置 public 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()
,用于将 SV 推入堆栈并使其成为可死亡的。
私有结构 mro_meta
的使用略有变化。无论如何,核心之外的任何东西都不应该直接访问它。
添加了一个新工具 Porting/expand-macro.pl,它允许您查看 C 预处理器宏在编译时如何展开。当您试图解码 perl 内部宏地狱时,这非常方便。
核心发行版现在可以在类 Unix 平台上并行运行其回归测试。而不是运行 make test
,在您的环境中设置 TEST_JOBS
为要并行运行的测试数量,然后运行 make test_harness
。在类 Bourne 的 shell 上,这可以通过以下方式完成
TEST_JOBS=3 make test_harness # Run 3 tests in parallel
使用环境变量而不是并行 make 本身,因为 TAP::Harness 需要能够自行调度单个无冲突的测试脚本,并且没有与 make
实用程序交互以与其作业调度程序交互的标准接口。
请注意,目前某些测试脚本在并行运行时可能会失败(最明显的是ext/IO/t/io_dir.t
)。如有必要,请再次按顺序运行失败的脚本,看看是否可以解决问题。
现在可以在t/TEST中覆盖PERL5OPT
及其相关变量。
一些可能在失败时无限期挂起的测试现在包含了“看门狗”功能,该功能会在超时后杀死这些测试,这有助于确保make test
和make test_harness
自动运行完成。
Perl 开发人员在核心代码中添加了许多新的测试。除了下面列出的内容外,许多从 CPAN 更新的模块也包含新的测试。
对核心测试进行了重大清理,以确保在测试之前不会使用语言和解释器功能。
make test_porting
现在运行一些重要的预提交检查,这些检查可能对任何从事 Perl 核心代码工作的人有用。
t/porting/podcheck.t自动检查MANIFEST中所有 .pl、.pm 和 .pod 文件中 POD 的格式是否正确,除了主要在 Perl 核心代码之外维护的双重授权模块。
t/porting/manifest.t现在测试 MANIFEST 中列出的所有文件是否存在。
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检查某些特殊形式的 open 是否有效。
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测试index
和线程的交互。
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 检查 universal.c 中可导出的 re
函数是否正常工作。
t/op/setpgrpstack.t 检查 setpgrp
是否正常工作。
t/op/substr_thr.t 测试 substr
和线程的交互。
t/op/upgrade.t 检查升级和赋值标量是否正常工作。
t/uni/lex_utf8.t 检查词法分析器中的 Unicode 是否正常工作。
t/uni/tie.t 检查 Unicode 和 tie
是否正常工作。
t/comp/final_line_num.t 测试文件末尾的行号是否正确。
t/comp/form_scope.t 测试格式作用域。
t/comp/line_debug.t 测试 @{"_<$file"}
是否正常工作。
t/op/filetest_t.t 测试 -t 文件测试是否正常工作。
t/op/qr.t 测试 qr
。
t/op/utf8cache.t 测试 utf8 缓存的故障。
t/re/uniprops.t 测试 Unicode 的 \p{}
正则表达式结构。
t/op/filehandle.t 测试一些可移植的文件测试运算符,以检查它们是否按预期工作,特别是在对文件句柄的祝福方式进行了一些内部更改的情况下。
t/op/time_loop.t 测试大于 2**63
的 Unix 时间(现在可以传递给 gmtime
和 localtime
)是否会导致内部溢出或过长的循环。
SV 分配跟踪已添加到 -Dm
启用的诊断信息中。如果在编译 perl 二进制文件时启用了 PERL_MEM_LOG
机制,则跟踪也可以通过该机制输出。
智能匹配解析跟踪已添加为新的诊断信息。使用 -DM
启用它。
一个新的调试标志 -DB
现在会转储子程序定义,将 -Dx
留给它原来的转储语法树的目的。
Perl 5.12 提供了许多新的诊断信息,以帮助您编写更好的代码。有关这些新信息的详细信息,请参阅 perldiag。
影响关键字 '%s' 的错误插件
gmtime(%.0f) 太大
词法分析代码试图将非 Latin-1 字符塞入 Latin-1 输入
词法分析代码内部错误 (%s)
localtime(%.0f) 太大
重载的解引用未返回引用
重载的 qr 未返回 REGEXP
Perl_pmflag() 已弃用,并将从 XS API 中删除
在子程序定义后忽略了左值属性
当尝试在子程序定义后将其标记为左值时,会发出此新警告。
如果 ++
或 --
无法更改值,因为该值超出了表示范围,Perl 现在会发出警告。
这使用了一个新的警告类别:“imprecision”。
lc
、uc
、lcfirst
和 ucfirst
在传递 undef 时会发出警告。
在“空上下文中的常量无用”中显示常量
在“%s”后的原型
panic: sv_chop %s
当 C 函数 Perl_sv_chop()
传递了一个不在标量字符串缓冲区内的位置时,会发生这个新的致命错误。这可能是由有问题的 XS 代码引起的,此时无法恢复。
如果 charnames
处理程序返回了格式错误的 UTF-8,现在会产生致命错误 \N 返回的 UTF-8 格式错误
。
如果在编译正则表达式模式时遇到未解析的命名字符或序列,则现在会产生致命错误 \N{NAME} 必须由词法分析器解析
。例如,当使用单引号上下文时,例如 $re = '\N{SPACE}'; /$re/;
。有关词法分析器如何被绕过的更多示例,请参阅 perldiag。
\N{U+...} 中的十六进制数字无效
是一个新的致命错误,当由 ...
表示的字符常量不是有效的十六进制数字时触发。
\N
的新含义 [^\n]
在方括号字符类中无效,就像字符类中的 .
失去了其特殊含义一样,会导致致命错误 字符类中的 \N 必须是命名字符:\N{...}
。
关于 \N{...}
中 ...
的合法内容的规则已经收紧,因此除非 ...
以字母字符开头并继续以字母数字、连字符、空格、括号或冒号的组合,否则现在会发出警告 \N{...} 中从 '%s' 开始的字符已弃用
。
如果 charnames
处理程序返回的字符序列超过了可使用字符数量的限制,则会发出警告 只使用 \N{} 返回的第一个字符
。消息将指示使用了哪些字符以及哪些字符被丢弃。
许多现有的诊断消息已得到改进或更正
一个新的警告类别 illegalproto
允许对围绕函数原型的警告进行更细粒度的控制。
以下两个警告
已从 syntax
顶级警告类别移动到新的第一级类别 illegalproto
。这两个警告目前是解析无效/非法原型时发出的唯一警告,因此现在可以使用
no warnings 'illegalproto';
仅抑制这些警告,而不抑制其他与语法相关的警告。原型被更改、忽略或未满足的警告仍然像以前一样在 prototype
类别中。
子程序 "%s" 的深度递归
现在可以通过重新编译 perl 二进制文件,将 C 预处理器宏 PERL_SUB_DEPTH_WARN
设置为所需的值,来更改此警告的深度阈值(默认值为 100)。
原型中的非法字符
警告在报告 _ 后的非法字符时现在更加精确。
mro 合并错误消息现在与 Algorithm::C3 生成的错误消息非常相似。
改进错误消息 "无法识别的字符 %s 在第 %d 列"
将错误消息更改为 "无法识别的字符 %s;在 %s<-- HERE 附近第 %d 列之后标记为 <-- HERE"。这应该使发现和纠正可疑字符变得更加容易。
Perl 现在在标量上下文中导致范围未初始化警告时,明确指向 $.
。
split
在空上下文调用时现在会发出警告。
printf
样式的函数在参数不足的情况下调用时,现在会发出警告 "缺少 %s 中的参数"
[perl #71000]
如果 each
、keys
或 values
在没有参数的情况下使用,Perl 现在会正确地返回语法错误,而不是发生段错误。
tell()
在没有参数的情况下调用,并且之前没有读取任何文件时,现在会正确失败。
tell()
现在返回 -1
,并将 errno 设置为 EBADF
,从而恢复 5.8.x 的行为。
overload
在重复的 'use overload' 行中不再隐式地取消设置回退。
POSIX::strftime() 现在可以在格式字符串中处理 Unicode 字符。
syntax
类别已从 5 个仅应在 deprecated
中的警告中删除。
三个致命的 pack
/unpack
错误消息已规范化为 panic: %s
Unicode 字符非法
已重新措辞,使其更加准确
现在显示的错误信息是 Unicode non-character is illegal in interchange
,并且 perldiag 文档也进行了扩展。
目前,在正则表达式模式的方括号字符类中使用 charnames
处理程序可能返回的多个字符中,除了第一个字符之外,其他所有字符都会被丢弃。如果发生这种情况,将发出警告 Using just the first character returned by \N{} in character class
。
如果 Perl 遇到 \N{
但没有找到匹配的 }
,则会发出警告 Missing right brace on \N{} or unescaped left brace after \N. Assuming the latter
。在这种情况下,Perl 不知道是错误地省略了右括号,还是想要匹配 "非换行符" 后面跟着 "匹配 {
"。它假设是后者,因为这实际上是有效的解释,而另一种情况则不是。如果您想要前者,则需要添加匹配的右括号。如果您想要后者,您可以通过编写 \N\{
来消除此警告。
gmtime
和 localtime
在使用小于它们可以可靠处理的数字时,现在会发出警告 gmtime(%.0f) too small
和 localtime(%.0f) too small
。
以下诊断消息已删除
Runaway format
Can't locate package %s for the parents of %s
通常,此警告仅与其他警告一起产生,删除它允许添加 ISA 查找优化。
v-string in use/require is non-portable
h2ph 现在也将在 include-fixed
中查找,这是 gcc 搜索路径的最新添加。
h2xs 不再错误地将枚举值视为宏。它现在还可以在枚举中正确处理 C++ 样式的注释 (//
)。
perl5db.pl 现在支持 LVALUE
子例程。此外,调试器现在可以正确处理代理常量子例程和子例程存根。
perlbug 现在使用 %Module::CoreList::bug_tracker
打印上游错误跟踪器 URL。如果用户将特定模块标识为其错误报告的主题,并且我们能够推断出其上游错误跟踪器的 URL,则 perlbug 现在会向用户提供一条消息,解释核心直接复制 CPAN 版本,并提供将错误直接报告给上游作者的 URL。
perlbug 现在不再报告“已发送消息”,即使它实际上没有发送消息。
perlthanks 是一个新的实用程序,用于向 Perl 的作者和维护者发送非错误报告。只收到错误报告可能会让人有点沮丧。如果 Perl 5.12 对您来说运行良好,请尝试使用 perlthanks。它会让开发人员感到高兴。
Perl 的开发人员修复了 a2p 中与列表上下文中 match()
运算符相关的错误。此外,a2p 现在不再生成使用 $[
变量的代码。
U+0FFFF 现在是正则表达式中的合法字符。
pp_qr 现在始终返回一个新的 regexp SV。解决 RT #69852。
不再返回对(预编译)regexp 在 optree 中的(另一个)引用,而是使用 reg_temp_copy() 创建它的副本,并返回对该副本的引用。这解决了与 Regexp::DESTROY 未及时调用相关的问题(由 RT #69852 跟踪的原始错误),以及与祝福 regexp 和分配给 regexp 相关的错误,如添加到票证中的通信中所述。
事实证明,当 ithreads 克隆 Regexp SV 时,我们还需要撤消 SvPVX() 共享,因为 mother_re 被设置为 NULL,而不是 mother_re 的克隆副本。此更改可能会修复某些其他情况下 regexp 和线程的错误,但到目前为止,测试或错误报告都没有表明任何问题,因此它可能实际上不是可以达到的边缘情况。
修复了使用 -Dmad
构建 perl 时出现的几个编译错误和段错误。
修复了 5.11.2 中的词法分析器 API 更改,这些更改破坏了 NYTProf 的 savesrc 选项。
-t
应该只对连接到 TTY 的文件句柄返回 TRUE
Microsoft C 版本的 isatty()
对所有字符模式设备返回 TRUE,包括 /dev/null 风格的“nul”设备和“lpt1”之类的打印机。
修复了由提交 fafafbaf 引起的回归,该回归导致参数传递期间出现恐慌 [perl #70171]
在不备份文件的系统上,-i'*' 现在按文档说明工作 [perl #70802]
保存和恢复魔术标志不再丢失只读标志。
格式错误的语法 grep EXPR LIST
(注意缺少逗号)不再导致突然且完全失败。
使用 `qr{}` 字面量编译的正则表达式在再次匹配时会正确设置 `$'`。
使用命名子例程与 `sort` 结合使用不再会导致总线错误 [perl #71076]
许多错误修复解决了最近添加的 Lexer API 导致的小问题。
对 `@_` 进行智能匹配有时会产生假阴性。[perl #71078]
现在可以将 `$@` 赋值为只读值(不会出错或导致堆栈崩溃)。
如果在活动比较子例程中递归调用 `sort` 多次,则不再会导致总线错误。[perl #71076]
如果传递了错误的输入,Tie::Hash::NamedCapture::* 不会中止(RT #71828)
@_ 和 $_ 在线程下不再泄漏(RT #34342 和 #41138,以及 #70602、#70974)
shebang 行中的 `-I` 现在会将目录添加到 @INC 的前面,如文档所述,以及在命令行中指定 `-I` 时。
当对非数字进程标识符调用 `kill` 时,现在会致命错误。以前,`undef` 进程标识符将被解释为请求杀死进程 0,这将在 POSIX 系统上终止当前进程组。由于进程标识符始终是整数,因此杀死非数字进程现在会致命错误。
5.10.0 无意中禁用了优化,这导致列表赋值的性能下降,例如通常用于从 `@_` 赋值函数参数。优化已重新启用,性能回归已修复。(此修复也存在于 5.10.1 中)
修复了 `while (1) { map 1, 1 }` 中的内存泄漏 [RT #53038]。
修复了 PerlIO 中的一些潜在的内核转储 [RT #57322,54828]。
调试器现在可以与左值子例程一起使用。
调试器的 `m` 命令在定义常量的模块中已损坏 [RT #61222]。
`crypt` 和字符串补码可能会为未污染的参数返回污染的值 [RT #59998]。
`-i`.suffix 命令行开关现在使用受限权限重新创建文件,然后将其模式更改为与原始文件匹配。这消除了潜在的竞争条件 [RT #60904]。
在某些 Unix 系统上,即使子进程核心转储,`$?` 中的值也不会设置最高位(`$? & 128`)。
在某些情况下,`$^R` 可能错误地变为未定义 [RT #57042]。
在 XS API 中,各种哈希函数在传递预计算的哈希时,如果键是 UTF-8,可能会导致错误的查找。
在 `perl.h` 之前包含 `XSUB.h` 的 XS 代码会导致编译时错误 [RT #57176]。
`$object->isa('Foo')` 如果包 `Foo` 不存在,即使对象的 `@ISA` 包含 `Foo`,也会报告错误。
在 5.10.0 中,针对 mro 代码的新增内容,发现并修复了通过操作 @ISA
触发的各种错误。
对引用进行按位运算可能会导致解释器崩溃,例如 $x=\$y; $x |= "foo"
[RT #54956]。
包含交替的模式可能对内部 UTF-8 表示敏感,例如
my $byte = chr(192);
my $utf8 = chr(192); utf8::upgrade($utf8);
$utf8 =~ /$byte|X}/i; # failed in 5.10.0
在 UTF8 编码的 Perl 源文件(即 use 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
在 64 位操作系统上被限制为 32 位段大小 [RT #63924]。
使用 next
或 last
退出 given
块不再产生类似以下的虚假警告
Exiting given via last at foo.pl line 123
将格式分配给 glob 可能会破坏格式;例如
*bar=*foo{FORMAT}; # foo format now bad
尝试将 typeglob 强制转换为字符串或数字可能会导致断言失败。现在会生成正确的错误消息,Can't coerce GLOB to $type
。
在 use filetest 'access'
下,-x
使用了错误的访问模式。这已修复 [RT #49003]。
对返回 Unicode 值的绑定标量使用 length
在第一次时将不正确。这已修复。
在数组 tie
内部使用数组 tie
可能会导致 SEGV。这已修复。[RT #51636]
已识别并修复了 PerlIOStdio_close()
内部的竞争条件。这曾经会导致各种线程问题,包括 SEGVs。
在 unpack
中,在标量上下文中使用 ()
组会在内部将列表放在解释器的堆栈上,这以各种方式表现出来,包括 SEGVs。这现在已修复 [RT #50256]。
在 substr
、\&$x
、tie $x, $m
和 chop
中,魔法被调用了两次。这些都已修复。
已恢复 5.10.0 中对 s///ge
隐式循环内的临时堆栈进行清除的优化,因为它被证明是解释器看似无关部分中难以理解的错误的原因 [提交 ef0d4e17921ee3de]。
elsif
内部的警告的行号现在是正确的。
..
运算符现在可以与结束位置在最小和最大整数的值处或接近这些值的范围一起正常工作。
binmode STDIN, ':raw'
可能会在某些平台上导致段错误。这已修复 [RT #54828]。
一个越界错误导致index $str, ...
实际上被执行为index "$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
在打印 UTF-8 字符串时可能会产生致命错误panic: utf8_mg_pos_cache_update
[RT #62666]。
在 5.10.0 版本中,动态创建的AUTOLOAD
方法可能会被遗漏(方法缓存问题) [RT #60220,60232]。
在 5.10.0 版本中,use feature
和 //ee
的组合会导致内存泄漏 [RT #63110]。
如果在命令行中也指定了-C
,则在 Shebang(#!
)行上的-C
再次被允许。如果-C
不在命令行中,则在 Shebang 行上的-C
曾经是一个静默的无操作,因此 perl 5.10.0 不允许它,这会破坏一些脚本。现在 perl 检查它是否也在命令行中,并且只有在没有的情况下才会死亡 [RT #67880]。
在 5.10.0 中,某些类型的可重入正则表达式可能会崩溃,或者导致以下断言失败 [RT #60508]
Assertion rx->sublen >= (s - rx->subbeg) + i failed
Perl 现在包含了之前缺失的 Unicode 字符数据库文件。
Perl 现在在打开匿名临时文件时会尊重TMPDIR
。
Perl 具有极高的可移植性。一般来说,如果一个平台有 C 编译器,那么有人已经将 Perl 移植到它(或者很快就会移植)。我们很高兴地宣布 Perl 5.12 包含对几个新平台的支持。同时,也是时候告别一些(非常)老朋友了。
Perl 的开发人员已经合并了来自 Haiku 维护者的补丁。Perl 现在应该可以在 Haiku 上构建。
Perl 现在应该可以在 MirOS BSD 上构建。
已为 AIX 5L 和 6.1 删除 libbsd。仅从 libbsd 使用 flock()
。
如果安装了 libgdbm < 1.8.3-5,则已为 AIX 5L 和 6.1 删除 libgdbm。libgdbm 作为 AIX 工具箱中的可选包提供。不幸的是,低于 1.8.3-5 的版本已损坏。
提示更改意味着 AIX 4.2 应该可以再次工作。
Perl 现在支持 Cygwin 1.7 及更高版本上的 IPv6。
在 Cygwin 上,我们现在从 DLL 中删除最后一个数字。多年来,cygwin.com 构建一直是这种行为。提示文件已更新。
跳过在 Darwin 10 (Mac OS X 10.6) 上测试 be_BY.CP1131 本地化,因为它仍然存在错误。
更正用于识别 Darwin 8 和 9 (分别为 Mac OS X 10.4 和 10.5) 上有错误的本地化的正则表达式中的不当之处。
修复线程库选择 [perl #69686]
提示文件现在识别 FreeBSD 7 及更高版本上的正确线程库。
我们现在解决 Irix 6.5 编译器中一个奇怪的预处理器错误:cc -E -
不幸地进入了 K&R 模式,但 cc -E file.c
却没有。
提示现在支持 5.* 版本。
-UDEBUGGING
现在是 VMS 上的默认值。
就像它在其他地方已经存在了很长时间一样。还在 configure.com 中使命令行选择 -UDEBUGGING 和 -DDEBUGGING 工作;之前唯一关闭它的方法是在回答交互式问题时说不。
VMS 上的默认管道缓冲区大小已在 64 位系统上更新为 8192。
如果 $/
设置为数字引用(表示记录样式读取),则从 PerlIO::scalar
的内存中临时文件读取将失败。现在已修复。
VMS 现在支持 getgrgid
。
对 VMS 文件名处理和转换代码进行了许多改进和清理。
启用 PERL_VMS_POSIX_EXIT
逻辑名称现在将在 VMS 条件值中编码 POSIX 退出状态,以便更好地与 GNV 的 bash shell 和其他依赖于 POSIX 退出值的实用程序进行交互。有关详细信息,请参阅 "$?" in perlvms。
File::Copy
现在检测 VMS 上的 Unix 兼容模式。
已合并来自 Stratus 的各种更改。
现在支持 Symbian S60 3.2 SDK 和 S60 5.0 SDK。
Perl 5.12 支持 Windows 2000 及更高版本。对旧版 Windows 的支持代码仍然包含在内,但将在下一个开发周期中删除。
现在可以使用 MinGW-w64 构建 Perl 的初始支持。
perl.exe 现在包含一个清单资源,用于指定 Windows Vista 及更高版本的 trustInfo
设置。没有此设置,Windows 会将 perl.exe 视为旧版应用程序,并应用各种启发式方法,例如将对受保护文件系统区域(如“Program Files”文件夹)的访问重定向到用户的“VirtualStore”,而不是生成适当的“权限被拒绝”错误。
清单资源还请求 Microsoft 公共控件版本 6.0(Windows XP 中引入的主题控件)。查看 CPAN 上的 Win32::VisualStyles 模块,以切换回旧样式的非主题控件,以用于旧版应用程序。
-t
文件测试运算符现在仅在文件句柄连接到控制台窗口时才返回 true。在以前的 Perl 版本中,它将对所有字符模式设备返回 true,包括 NUL 和 LPT1。
-p
文件测试运算符现在可以正常工作,并且在 Perl 使用 Microsoft Visual C 编译时定义了 Fcntl::S_IFIFO 常量。在以前的 Perl 版本中,-p
始终返回 false 值,并且未定义 Fcntl::S_IFIFO 常量。
此错误特定于 Microsoft Visual C,并且从未影响使用 MinGW 构建的 Perl 二进制文件。
套接字错误代码现在得到更广泛的支持:POSIX 模块将定义符号名称,如 POSIX::EWOULDBLOCK,并且 $! 中的套接字错误代码的字符串化现在也可以正常工作;
C:\>perl -MPOSIX -E "$!=POSIX::EWOULDBLOCK; say $!"
A non-blocking socket operation could not be completed immediately.
flock() 现在将在 $! 中设置合理的错误代码。以前的 Perl 版本将 $^E 的值复制到 $! 中,这造成了很多混乱。
select() 现在更正确地支持所有空 fd_set
。
'.\foo'
和 '..\foo'
在 do
和 require
中的处理方式与 './foo'
和 '../foo'
不同 [RT #63492]。
改进的消息窗口处理意味着alarm
和kill
消息在竞争条件下将不再被丢弃。
Perl 的构建基础设施的各个部分在发布时不再转换为 win32 行尾。如果这对你造成了困扰,请使用 perl 中包含的 perlbug 程序报告问题。
这是一个关于一些重要的未修复错误的列表,这些错误是相对于 5.10.x 或 5.8.x 的回归。
如果在你的构建目录之外存在一个正常工作的文件 ../../cpanp-run-perl,一些 CPANPLUS 测试可能会失败。失败并不意味着实际功能软件存在问题。该错误已在 [RT #74188] 中修复,并计划包含在 perl-v5.12.1 中。
List::Util::first
在存在词法 $_
(通常由 my $_
或隐式地由 given
引入)的情况下表现异常。每次迭代设置的变量是包变量 $_
,而不是词法 $_
[RT #67694]。
类似的问题可能会出现在其他提供以块作为第一个参数的函数的模块中,例如
foo { ... $_ ...} list
与编译模式的线程相比,一些正则表达式在子线程中运行时可能会慢得多 [RT #55600]。
诸如 "\N{LATIN SMALL LIGATURE FF}" =~ /\N{LATIN SMALL LETTER F}+/
之类的表达式看起来会挂起,因为它们会进入一个非常长的运行循环 [RT #72998]。
一些移植者报告了在某些 Windows 2000 系统上构建后运行 Perl 的整个测试套件时出现的神秘崩溃。据报道,手动运行时,各个测试可以正常工作。
这实际上是 5.10.0 中引入的一个更改,但它在该版本的 perldelta 中被遗漏了,因此在这里提到。
与处理 /m
修饰符和 qr
相关的错误修复导致了 5.8.x 和 5.10.0 之间的行为变化。
# matches in 5.8.x, doesn't match in 5.10.0
$re = qr/^bar/; "foo\nbar" =~ /$re/m;
Perl 5.12.0 代表了自 Perl 5.10.0 以来大约两年的开发,包含了来自 200 多位作者和提交者的 3000 多个文件中的 750,000 多行更改。
由于充满活力的用户和开发人员社区,Perl 在其第三个十年中继续蓬勃发展。以下人员已知为 Perl 5.12.0 的改进做出了贡献。
Aaron Crane, Abe Timmerman, Abhijit Menon-Sen, Abigail, Adam Russell, Adriano Ferreira, Ævar Arnfjörð Bjarmason, Alan Grover, Alexandr Ciornii, Alex Davies, Alex Vandiver, Andreas Koenig, Andrew Rodland, [email protected], Andy Armstrong, Andy Dougherty, Jose AUGUSTE-ETIENNE, Benjamin Smith, Ben Morrow, bharanee rathna, Bo Borgerson, Bo Lindbergh, Brad Gilbert, Bram, Brendan O'Dea, brian d foy, Charles Bailey, Chip Salzenberg, Chris 'BinGOs' Williams, Christoph Lamprecht, Chris Williams, chromatic, Claes Jakobsson, Craig A. Berry, Dan Dascalescu, Daniel Frederick Crisman, Daniel M. Quinlan, Dan Jacobson, Dan Kogai, Dave Mitchell, Dave Rolsky, David Cantrell, David Dick, David Golden, David Mitchell, David M. Syzdek, David Nicol, David Wheeler, Dennis Kaarsemaker, Dintelmann, Peter, Dominic Dunlop, Dr.Ruud, Duke Leto, Enrico Sorcinelli, Eric Brine, Father Chrysostomos, Florian Ragwitz, Frank Wiegand, Gabor Szabo, Gene Sullivan, 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 Sutton, Ingo Weinhold, James Bence, James Mastros, Jan Dubois, Jari Aalto, Jarkko Hietaniemi, Jay Hannah, Jerry Hedden, Jesse Vincent, Jim Cromie, Jody Belka, John E. Malmberg, John Malmberg, John Peacock, John Peacock via RT, John P. Linderman, John Wright, Josh ben Jore, Jos I. Boumans, Karl Williamson, Kenichi Ishigaki, Ken Williams, Kevin Brintnall, Kevin Ryde, Kurt Starsinic, Leon Brocard, Lubomir Rintel, Luke Ross, Marcel Grünauer, Marcus Holland-Moritz, Mark Jason Dominus, Marko Asplund, Martin Hasch, Mashrab Kuvatov, Matt Kraai, Matt S Trout, Max Maischein, Michael Breen, Michael Cartmell, Michael G Schwern, Michael Witten, Mike Giroux, Milosz Tanski, Moritz Lenz, Nicholas Clark, Nick Cleaton, Niko Tyni, Offer Kaye, Osvaldo Villalon, Paul Fenwick, Paul Gaborit, Paul Green, Paul Johnson, Paul Marquess, Philip Hazel, Philippe Bruhat, Rafael Garcia-Suarez, Rainer Tammer, Rajesh Mandalemula, Reini Urban, Renée Bäcker, Ricardo Signes, Ricardo SIGNES, Richard Foley, Rich Rauenzahn, Rick Delaney, Risto Kankkunen, Robert May, Roberto C. Sanchez, Robin Barker, SADAHIRO Tomoyuki, Salvador Ortiz Garcia, Sam Vilain, Scott Lanning, Sébastien Aperghis-Tramoni, Sérgio Durigan Júnior, Shlomi Fish, Simon 'corecode' Schubert, Sisyphus, Slaven Rezic, Smylers, Steffen Müller, Steffen Ullrich, Stepan Kasal, Steve Hay, Steven Schubiger, Steve Peters, Tels, The Doctor, Tim Bunce, Tim Jenness, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tom Wyant, Tony Cook, Torsten Schoenfeld, Tye McQueen, Vadim Konovalov, Vincent Pit, Hio YAMASHINA, Yasuhiro Matsumoto, Yitzchak Scott-Thoennes, Yuval Kogman, Yves Orton, Zefram, Zsban Ambrus
这非常不完整,因为它是由版本控制历史自动生成的。特别是,它不包括报告了先前版本 Perl 中的问题的贡献者(非常感谢)的姓名,这些问题帮助使 Perl 5.12.0 变得更好。有关 Perl 所有历史贡献者的更完整列表,请参阅 Perl 5.12.0 发行版中的 AUTHORS
文件。
我们的“退休”南瓜王 Nicholas Clark 和 Rafael Garcia-Suarez 由于他们杰出而实质性的持续贡献而值得特别感谢。Nicholas 个人编写了自 5.10.0 以来超过 30% 的补丁。Rafael 在补丁作者中排名第二,占 11%,但在提交他人编写的补丁方面遥遥领先,推动了自 5.10.0 以来 44% 的提交,通常是在为补丁作者提供了大量指导之后。这些统计数据绝不包含他们所有的贡献,但简而言之,我们离不开他们。
此版本中包含的许多更改源于 Perl 内核中包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。
如果您发现您认为是错误,您可能需要查看最近发布到 comp.lang.perl.misc 新闻组的文章和 Perl 错误数据库,地址为 http://rt.perl.org/perlbug/。您也可以在 Perl 主页 https://www.perl5.cn/ 上找到相关信息。
如果您认为您遇到了一个未报告的错误,请运行您发布版本中包含的 perlbug 程序。请确保将您的错误缩减为一个微小但足够完整的测试用例。您的错误报告以及 perl -V
的输出将被发送到 [email protected],由 Perl 移植团队进行分析。
如果您要报告的错误涉及安全问题,不适合发送到公开存档的邮件列表,请将其发送到 [email protected]。此地址指向一个封闭订阅的未存档邮件列表,其中包括所有核心提交者,他们将能够帮助评估问题的影響,找出解决方案,并帮助协调在所有支持 Perl 的平台上发布补丁以减轻或修复问题。请仅将此地址用于 Perl 核心中的安全问题,不要用于在 CPAN 上独立分发的模块。
Changes 文件,了解如何查看有关更改的详尽信息。
INSTALL 文件,了解如何构建 Perl。
README 文件,了解一般信息。
Artistic 和 Copying 文件,了解版权信息。
https://dev.perl5.cn/perl5/errata.html,列出了此版本发布后发现的问题,以及已知与此版本不兼容的 CPAN 模块列表。