内容

名称

perl5220delta - perl v5.22.0 的新增内容

描述

本文档描述了 5.20.0 版本和 5.22.0 版本之间的差异。

如果您从 5.18.0 或更早版本升级,请先阅读 perl5200delta,其中描述了 5.18.0 和 5.20.0 之间的差异。

核心增强功能

新的位运算符

添加了一个新的实验性功能,它使四个标准位运算符 (& | ^ ~) 一致地将它们的运算对象视为数字,并引入了四个新的带点运算符 (&. |. ^. ~.) ,它们一致地将它们的运算对象视为字符串。赋值变体 (&= |= ^= &.= |.= ^.=) 也是如此。

要使用此功能,请启用 "bitwise" 功能并禁用 "experimental::bitwise" 警告类别。有关详细信息,请参阅 "perlop 中的位字符串运算符"[GH #14348].

新的双菱形运算符

<<>><> 相似,但使用三参数 open 打开 @ARGV 中的每个文件。这意味着 @ARGV 的每个元素都将被视为实际文件名,而 "|foo" 不会被视为管道打开。

正则表达式中的新 \b 边界

qr/\b{gcb}/

gcb 代表音位字符边界。它是一个 Unicode 属性,可以找到看起来像单个字符的字符序列之间的边界,对于某种语言的母语人士来说。Perl 长期以来一直能够通过 \X 正则表达式转义序列来处理这些问题。现在,有一种替代方法来处理这些问题。有关详细信息,请参阅 "perlrebackslash 中的 \b{}, \b, \B{}, \B"

qr/\b{wb}/

wb 代表单词边界。它是一个 Unicode 属性,可以找到单词之间的边界。这类似于普通的 \b(没有大括号),但更适合自然语言处理。例如,它知道撇号可以出现在单词中间。有关详细信息,请参阅 "perlrebackslash 中的 \b{}, \b, \B{}, \B"

qr/\b{sb}/

sb 代表句子边界。它是一个 Unicode 属性,用于帮助解析自然语言句子。有关详细信息,请参见 perlrebackslash 中的“\b{}, \b, \B{}, \B”

非捕获正则表达式标志

正则表达式现在支持 /n 标志,该标志禁用捕获并在组内填充 $1$2 等。

"hello" =~ /(hi|hello)/n; # $1 is not set

这等效于在每个捕获组的开头放置 ?:

有关更多信息,请参见 perlre 中的“n”

use re 'strict'

这将对在其作用域内编译的正则表达式模式应用更严格的语法规则。这将有助于您发现打字错误和其他意外行为,这些行为是由于向后兼容性问题而无法在正常的正则表达式编译中报告的。由于此行为可能会在未来的 Perl 版本中发生变化,因此使用此 pragma 将引发类别为 experimental::re_strict 的警告。请参见 re 中的“strict”

现在支持 Unicode 7.0(带修正)

有关此版本中包含的内容的详细信息,请参见 http://www.unicode.org/versions/Unicode7.0.0/。Perl 附带的 Unicode 7.0 版本包含一个修正,用于处理阿拉伯语中的字形整形(请参见 http://www.unicode.org/errata/#current_errata)。

use locale 可以限制受影响的区域设置类别

现在可以将参数传递给 use locale 以指定要设置为区域设置感知的区域设置类别子集,而其余类别不受影响。有关详细信息,请参见 perllocale 中的“The "use locale" pragma”

Perl 现在支持 POSIX 2008 区域设置货币添加

在能够处理 POSIX.1-2008 的平台上,由 POSIX::localeconv() 返回的哈希包含该版本 POSIX 标准添加的国际货币字段。这些是 int_n_cs_precedesint_n_sep_by_spaceint_n_sign_posnint_p_cs_precedesint_p_sep_by_spaceint_p_sign_posn

在旧平台上用于确定区域设置 UTF-8 性质的更好的启发式方法

在既未实现 C99 标准也未实现 POSIX 2001 标准的平台上,确定当前区域设置是否为 UTF-8 取决于启发式方法。这些方法在本版本中得到了改进。

通过引用别名

变量和子程序现在可以通过赋值给引用来创建别名。

\$c = \$d;
\&x = \&y;

别名也可以通过在 foreach 迭代器变量之前使用反斜杠来实现;这可能是此功能提供的最有用的习惯用法。

foreach \%hash (@array_of_hash_refs) { ... }

此功能是实验性的,必须通过 use feature 'refaliasing' 启用。除非禁用 experimental::refaliasing 警告类别,否则它会发出警告。

参见 "perlref 中的赋值给引用"

无参数的 prototype

无参数的 prototype() 现在推断 $_[GH #14376].

新的 :const 子程序属性

const 属性可以应用于匿名子程序。它会导致新子程序在每次创建时立即执行(即当 sub 表达式被评估时)。它的值被捕获并用于创建一个新的常量子程序,该子程序被返回。此功能是实验性的。参见 "perlsub 中的常量函数".

fileno 现在适用于目录句柄

当操作系统中提供相关支持时,fileno 内置函数现在适用于目录句柄,以与文件句柄相同的方式产生底层文件描述符。在没有此类支持的操作系统上,目录句柄上的 fileno 继续返回未定义的值,如前所述,但也会将 $! 设置为指示操作不受支持。

目前,这使用 OS DIR 结构中的 dd_fd 成员,或 POSIX.1-2008 中指定的 dirfd(3) 函数。

为 Win32 实现管道打开的列表形式

管道的列表形式

open my $fh, "-|", "program", @arguments;

现在在 Win32 上实现。它与 Win32 上的 system LIST 具有相同的限制,因为 Win32 API 不接受程序参数作为列表。

赋值给列表重复

(...) x ... 现在可以在分配给的列表中使用,只要左侧是一个有效的左值。这允许 (undef,undef,$foo) = that_function() 写成 ((undef)x2, $foo) = that_function().

改进无穷大和 NaN(非数字)处理

浮点值能够保存特殊值无穷大、负无穷大和 NaN(非数字)。现在,我们更稳健地识别和传播计算中的值,并在输出时将它们规范化为字符串 Inf-InfNaN

另请参见 POSIX 增强功能。

浮点解析已改进

浮点值的解析和打印已改进。

作为一项全新的功能,十六进制浮点数字面量(例如 0x1.23p-4)现在已受支持,并且可以使用 printf "%a" 输出。有关更多详细信息,请参阅 "perldata 中的标量值构造函数"

将无穷大或非数字打包到字符中现在是致命的

之前,当尝试将无穷大或非数字打包到(带符号)字符中时,Perl 会发出警告,并假设您尝试打包 0xFF;如果您将其作为 chr 的参数提供,则会返回 U+FFFD

但现在,所有此类操作(packchrprint '%c')都会导致致命错误。

实验性 C 回溯 API

Perl 现在支持(通过 C 级 API)检索 C 级回溯(类似于 gdb 等符号调试器所做的事情)。

回溯返回 C 调用帧的堆栈跟踪,包括符号名称(函数名称)、对象名称(如“perl”),以及如果可以,还包括源代码位置(文件:行)。

支持的平台是 Linux 和 OS X(一些 *BSD 可能至少部分工作,但尚未经过测试)。

该功能需要使用 Configure -Dusecbacktrace 启用。

有关更多信息,请参阅 "perlhacktips 中的 C 回溯"

安全

如果可用,Perl 现在使用 -fstack-protector-strong 编译

自 5.10.1 以来,Perl 一直使用反堆栈溢出选项 -fstack-protector 编译。现在,如果可用,Perl 使用名为 -fstack-protector-strong 的较新变体。

Safe 模块可能允许替换外部包

严重错误修复:外部包可能被替换。 Safe 已修补到 2.38 以解决此问题。

如果可用,Perl 现在始终使用 -D_FORTIFY_SOURCE=2 编译

gcc 4.* 中提供的名为 _FORTIFY_SOURCE 的“代码加固”选项现在始终用于编译 Perl(如果可用)。

请注意,这并不一定是一个巨大的进步,因为在许多平台上,这一步已经在几年前就已完成:许多 Linux 发行版(如 Fedora)一直在为 Perl 使用此选项,而 OS X 已经强制执行了多年。

不兼容的更改

子程序签名已移至属性之前

实验性子程序签名功能(在 5.20 中引入)在属性之后解析签名。在本版本中,根据用户对实验性功能的反馈,已将位置更改为签名出现在子程序名称(如果有)之后,属性列表(如果有)之前。

&\& 原型仅接受子程序

& 原型字符现在仅接受匿名子程序 (sub {...})、以 \& 开头的项或显式 undef。以前,它错误地也允许对数组、哈希和列表的引用。 [GH #2776]. [GH #14186]. [GH #14353].

此外,\& 原型允许子程序调用,而现在它只允许子程序:&foo 仍然允许作为参数,而 &foo()foo() 不再允许。 [GH #10633].

use encoding 现在是词法作用域的

编码 编译指示的作用现在仅限于词法作用域。此编译指示已弃用,但在此期间,它可能会对同一程序中包含的无关模块产生不利影响;此更改修复了该问题。

列表切片返回空列表

列表切片现在仅在原始列表为空(或没有索引)时返回空列表。以前,如果所有索引都超出原始列表,列表切片将返回空列表;现在,在这种情况下,它将返回一个包含 undef 值的列表。 [GH #12335].

\N{} 带有多个空格序列现在是致命错误

例如 \N{TOO  MANY SPACES}\N{TRAILING SPACE }。自 v5.18 起,此功能已弃用。

use UNIVERSAL '...' 现在是致命错误

UNIVERSAL 导入函数自 v5.12 起已弃用,现在是致命错误。 use UNIVERSAL 不带任何参数仍然允许。

在双引号中 \cXX 现在必须是可打印的 ASCII 字符

在以前的版本中,未能做到这一点会引发弃用警告。

在正则表达式中拆分标记 (?(* 现在是致命编译错误。

这些自 v5.18 起已弃用。

qr/foo/x 现在忽略所有 Unicode 模式空白

/x 正则表达式修饰符允许模式包含空格和注释(两者都被忽略),以提高可读性。到目前为止,并非所有 Unicode 为此目的指定的空格字符都得到处理。现在识别出的其他字符是

U+0085 NEXT LINE
U+200E LEFT-TO-RIGHT MARK
U+200F RIGHT-TO-LEFT MARK
U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR

在方括号字符类之外且未以反斜杠开头的情况下,使用这些字符与 /x 一起使用,自 v5.18 以来已发出弃用警告。现在它们将被忽略。

(?[ ]) 内的注释行现在仅以 \n 结束

(?[ ]) 是一个实验性功能,在 v5.18 中引入。它的运行方式就好像始终启用了 /x。但存在差异:注释行(在 # 字符之后)以匹配 \R 的任何内容终止,其中包括所有垂直空格,例如换页符。为了保持一致性,这现在更改为匹配终止 (?[ ]) 外部注释行的内容,即 \n(即使转义),这与终止 heredoc 字符串和格式的内容相同。

(?[...]) 运算符现在遵循标准 Perl 优先级

此实验性功能允许在正则表达式模式中进行集合运算。在此之前,交集运算符与其他二元运算符具有相同的优先级。现在它具有更高的优先级。这可能会导致与现有代码预期不同的结果(尽管文档始终指出可能会发生此更改,建议完全将表达式括起来)。请参阅 "perlrecharclass 中的扩展方括号字符类"

在哈希和数组名称上省略 %@ 不再允许

非常旧的 Perl 允许您在某些位置省略数组名称上的 @ 和哈希名称上的 %。自 Perl 5.000 以来,这已发出弃用警告,并且不再允许。

"$!" 文本现在在 use locale 的作用域之外为英文

以前,该文本与几乎所有其他内容不同,始终根据程序的当前底层区域设置输出。(在某些系统上,"$^E" 也会受到影响。)对于未准备好处理区域设置差异的程序,这会导致显示垃圾文本。最好显示可以通过某些工具翻译的文本,而不是难以弄清楚的垃圾文本。

"$!" 文本将在适当的时候以 UTF-8 格式返回

当文本实际上是非 ASCII UTF-8 时,$!$^E 的字符串化将设置 UTF-8 标志。这将使设置为区域设置感知的程序能够以用户的母语正确输出消息。需要继续使用 5.20 及更早版本行为的代码可以在 use bytesuse locale ":messages" 的作用域内进行字符串化。在这两个作用域内,没有其他 Perl 操作会受到区域设置的影响;只有 $!$^E 字符串化。bytes 编译指示会导致不设置 UTF-8 标志,就像在以前的 Perl 版本中一样。这解决了 [GH #12035]

不再支持没有显式操作符的 ?PATTERN?

m?PATTERN? 结构允许仅匹配一次正则表达式,以前有一个直接用问号分隔符编写的替代形式,省略了显式的 m 操作符。这种用法自 5.14.0 以来一直产生弃用警告。现在它是一个语法错误,以便问号可用于新操作符。

defined(@array)defined(%hash) 现在是致命错误

这些自 v5.6.1 以来一直被弃用,并且自 v5.16 以来一直引发弃用警告。

使用哈希或数组作为引用现在是致命错误

例如,%foo->{"bar"} 现在会导致致命编译错误。这些自 v5.8 之前就被弃用,并且自那时起一直引发弃用警告。

* 原型的更改

子例程原型中的 * 字符过去允许裸词优先于大多数(但不是全部)子例程名称。它从未一致,并且表现出错误的行为。

现在它已经改变,因此子例程始终优先于裸词,这使其与类似原型化的内置函数一致。

sub splat(*) { ... }
sub foo { ... }
splat(foo); # now always splat(foo())
splat(bar); # still splat('bar') as before
close(foo); # close(foo())
close(bar); # close('bar')

弃用

${^ENCODING} 设置为除 undef 之外的任何值

此变量允许 Perl 脚本以除 ASCII 或 UTF-8 之外的编码编写。但是,它会全局影响所有模块,导致错误答案和段错误。新脚本应该用 UTF-8 编写;旧脚本应该转换为 UTF-8,这很容易使用 piconv 实用程序完成。

在单字符变量名中使用非图形字符

单字符变量名的语法比更长的变量名更宽松,允许一个字符的名称为标点符号,甚至不可见(非图形)。Perl v5.20 弃用了 ASCII 范围内的控制字符作为这样的名称。现在,所有以前允许的非图形字符都被弃用。这在没有 use utf8 时才会发生,并且只影响 C1 控制字符(代码点 0x80 到 0xFF)、不间断空格和软连字符。

内联 sub () { $var } 具有可观察的副作用

在许多情况下,Perl 会将 sub () { $var } 转换为可内联的常量子程序,捕获 $varsub 表达式求值时的值。当 $var 随后被修改时,这可能会破坏闭包的行为,因为子程序不会返回更改后的值。(请注意,这仅适用于具有空原型(sub ())的匿名子程序。)

在变量可能在其他地方被修改的情况下,这种用法现在已弃用。Perl 会检测这些情况并发出弃用警告。此类代码可能会在将来发生变化,并停止生成常量。

如果您的变量仅在声明的地方被修改,那么 Perl 将继续使子程序可内联,不会发出警告。

sub make_constant {
    my $var = shift;
    return sub () { $var }; # fine
}

sub make_constant_deprecated {
    my $var;
    $var = shift;
    return sub () { $var }; # deprecated
}

sub make_constant_deprecated2 {
    my $var = shift;
    log_that_value($var); # could modify $var
    return sub () { $var }; # deprecated
}

在上面的第二个示例中,检测 $var 是否只被赋值一次太难了。它发生在 my 声明之外的地方,足以让 Perl 认为它可疑。

此弃用警告仅针对子程序主体中的简单变量。(子程序内部的 BEGIN 块或 use 语句将被忽略,因为它不会成为子程序主体的一部分。)对于更复杂的情况,例如 sub () { do_something() if 0; $var },行为已发生改变,如果变量在其他地方可修改,则不会发生内联。此类情况应该很少见。

使用多个 /x 正则表达式修饰符

现在已弃用以下任何一种说法

qr/foo/xx;
/(?xax:foo)/;
use re qw(/amxx);

也就是说,现在 x 应该只在任何连续的正则表达式模式修饰符字符串中出现一次。我们认为在整个 CPAN 中都没有出现这种情况。这是为了准备未来的 Perl 版本,其中 /xx 允许在方括号字符类(括在方括号中:[...])中使用空格以提高可读性。

\N{...} 的字符别名中使用不间断空格现在已弃用

此非图形字符本质上与普通空格无法区分,因此不应该被允许。请参阅 "CUSTOM ALIASES" in charnames

现在应该在模式中转义字面 "{"

如果您想要在正则表达式模式中使用字面左花括号(也称为左大括号),您现在应该通过在它前面加上反斜杠 ("\{") 或将其括在方括号 "[{]" 中,或者使用 \Q 来转义它;否则将发出弃用警告。这在 v5.16 版本中首次宣布即将发布;它将允许将来对语言进行扩展。

不鼓励将所有警告设为致命

有关 致命警告 的文档指出,use warnings FATAL => 'all' 不鼓励使用,并提供了更强烈的语言来描述致命警告的风险。

性能增强

模块和语义

更新的模块和语义

与 perl 一起分发的许多库自 v5.20.0 以来已升级。有关更改的完整列表,请运行

corelist --diff 5.20.0 5.22.0

您也可以用您喜欢的版本替换 5.20.0。

一些值得注意的更改包括

已移除的模块和语义

以下模块(以及相关模块)已从核心 perl 发行版中移除

文档

新文档

perlunicook

这份由 Tom Christiansen 编写的文档提供了在 Perl 中处理 Unicode 的示例。

现有文档的更改

perlaix

perlapi

perldata

perlebcdic

perlfilter

perlfunc

perlguts

perlhack

perlhacktips

perlhpux

perllocale

perlmodstyle

perlop

perlpodspec

perlpolicy

perlport

perlre

perlrebackslash

perlrecharclass

perlref

perlsec

perlsyn

perlunicode

perluniintro

perlvar

perlvms

perlxs

诊断信息

诊断输出(包括警告和致命错误消息)已进行以下添加或更改。有关诊断消息的完整列表,请参阅 perldiag

新的诊断信息

新的错误

新的警告

对现有诊断的更改

诊断移除

实用程序更改

find2perls2pa2p 移除

h2ph

encguess

配置和编译

测试

平台支持

恢复的平台

IRIX 和 Tru64 平台再次可以使用。

一些 make test 错误仍然存在:[GH #14557][GH #14727] 针对 IRIX;[GH #14629][cpan #99605],以及 [cpan #104836] 针对 Tru64。

运行 EBCDIC 代码页 1047 的 z/OS

核心 perl 现在可以在此 EBCDIC 平台上运行。早期的 perl 也能运行,但即使支持没有正式撤回,最近的 perl 也无法很好地编译和运行。Perl 5.20 可以运行,但存在许多现在已修复的错误。许多与 Perl 一起提供的 CPAN 模块仍然无法通过测试,包括 Pod::Simple。但是,目前在 CPAN 上的 Pod::Simple 版本应该可以运行;它修复得太晚,无法包含在 Perl 5.22 中。正在努力修复许多仍然无法正常工作的 CPAN 模块,这些模块很可能在完成时安装在 CPAN 上,因此您可能不必等到 Perl 5.24 才能获得工作版本。

已停用的平台

NeXTSTEP/OPENSTEP

NeXTSTEP 是 NeXT 工作站捆绑的专有操作系统,在 90 年代初期到中期流行;OPENSTEP 是一个 API 规范,它在非 NeXTSTEP 系统上提供了类似 NeXTSTEP 的环境。两者现已停止维护,因此对它们构建 Perl 的支持已被移除。

平台特定说明

EBCDIC

在 EBCDIC 平台上,perl 解释器需要特殊处理才能使 qr/[i-j]/ 仅匹配 "i""j",因为 "i""j" 的代码点之间有 7 个字符。这种特殊处理以前只在范围的两端都是字面量时才调用。现在,如果使用任何 \N{...} 形式通过名称或 Unicode 代码点指定字符,而不是字面量,也会调用它。请参阅 "perlrecharclass 中的字符范围"

HP-UX

archname 现在区分 use64bitint 和 use64bitall。

Android

构建支持已针对交叉编译(尤其是 Android)进行了改进。

VMS
  • 在不等待的情况下生成子进程时,返回值现在是正确的 PID。

  • 修复了一个原型,以便在 VMS C++ 编译器下链接不会失败。

  • finitefinitelisfinite 检测已添加到 configure.com 中,环境处理进行了一些细微更改,并修复了遗留功能检查状态。

Win32
  • miniperl.exe 现在使用 -fno-strict-aliasing 构建,允许在 GCC 4.8 上完成 64 位构建。 [GH #14556]

  • nmake minitest 现在可以在 Win32 上运行。由于依赖关系问题,您需要先构建 nmake test-prep,并且一小部分测试会失败。 [GH #14318]

  • 现在可以通过将 makefile 宏 USE_CPLUSPLUS 设置为值 "define",在 Windows 上以 C++ 模式构建 Perl。

  • 已为 Win32 实现管道打开的列表形式。注意:与 system LIST 不同,它不会回退到 shell。 [GH #13574]

  • 在 Windows makefile 中添加了新的 DebugSymbolsDebugFull 配置选项。

  • 以前,使用 Visual C++ 为 Win64 编译 XS 模块(包括 CPAN 模块)会导致每个文件从 hv_func.h 中产生大约十几个警告。这些警告已被消除。

  • 从 Windows makefile 中删除了在没有 PerlIO 的情况下构建的支持。在 Perl 5.18.0 中,非 PerlIO 构建几乎被弃用,并且在 POSIX 系统上,Configure 已经不支持它们。

  • 每个尝试为 @INC 中的每个路径打开 perl 模块的操作,都节省了 2 到 6 毫秒和 7 次 I/O 调用。

  • Intel C 构建现在始终以 C99 模式构建。

  • %I64d 现在被用于 MinGW,而不是 %lld

  • 在实验性的 :win32 层中,修复了 open 中的崩溃。此外,还为 :win32 实现了打开 /dev/null(在 Win32 Perl 的默认 :unix 层中有效)。[GH #13968]

  • Windows dmake Makefile 中添加了一个新的 Makefile 选项 USE_LONG_DOUBLE,仅适用于 gcc 构建。如果希望 Perl 使用长双精度数来提高浮点数的精度和范围,请将其设置为“define”。

OpenBSD

在 OpenBSD 上,Perl 现在默认使用系统 malloc,因为它提供了安全功能。由于性能原因,Perl 自 v5.14 起一直在使用自己的 malloc 包装器,但 OpenBSD 项目认为这种权衡是值得的,并且希望需要速度的用户明确要求它。

[GH #13888].

Solaris
  • 我们现在会在 /opt/solstudio*/opt/solarisstudio* 中查找 Sun Studio 编译器。

  • 在 Solaris 10 上使用 -Dusedtrace 构建会提前失败,因为 make 没有遵循隐式依赖关系来构建 perldtrace.h。在 depend 中添加了显式依赖关系。[GH #13334]

  • C99 选项已清理;提示会查找 solstudioSUNWspro;并且添加了对原生 setenv 的支持。

内部更改

已修复的错误

已知问题

讣告

Brian McCauley 于 2015 年 5 月 8 日去世。他经常在 Usenet、Perl Monks 和其他 Perl 论坛发帖,并在 NOBULL 的昵称下为 Perl FAQ 做出了许多 CPAN 贡献。他几乎参加了每次 YAPC::Europe,事实上,他还帮助组织了 YAPC::Europe 2006 和 QA Hackathon 2009。他对复杂系统的兴趣和乐趣在他的对棋盘游戏的热爱中尤为明显;许多 Perl 爱好者都会怀念与 Brian 一起玩 Fluxx 和其他游戏的时光。我们会怀念他。

致谢

Perl 5.22.0 代表了自 Perl 5.20.0 发布以来的大约 12 个月的开发,包含了来自 94 位作者的 2,400 个文件中的大约 590,000 行更改。

不包括自动生成的 文件、文档和发布工具,大约有 370,000 行更改涉及 1,500 个 .pm、.t、.c 和 .h 文件。

Perl 进入其第三个十年,得益于充满活力的用户和开发人员社区,它继续蓬勃发展。以下人员已知为 Perl 5.22.0 的改进做出了贡献。

Aaron Crane,Abhijit Menon-Sen,Abigail,Alberto Simões,Alex Solovey,Alex Vandiver,Alexandr Ciornii,Alexandre (Midnite) Jousset,Andreas König,Andreas Voegele,Andrew Fresh,Andy Dougherty,Anthony Heading,Aristotle Pagaltzis,brian d foy,Brian Fraser,Chad Granum,Chris 'BinGOs' Williams,Craig A. Berry,Dagfinn Ilmari Mannsåker,Daniel Dragan,Darin McBride,Dave Rolsky,David Golden,David Mitchell,David Wheeler,Dmitri Tikhonov,Doug Bell,E. Choroba,Ed J,Eric Herman,Father Chrysostomos,George Greer,Glenn D. Golden,Graham Knop,H.Merijn Brand,Herbert Breunung,Hugo van der Sanden,James E Keenan,James McCoy,James Raspass,Jan Dubois,Jarkko Hietaniemi,Jasmine Ngan,Jerry D. Hedden,Jim Cromie,John Goodyear,kafka,Karen Etheridge,Karl Williamson,Kent Fredric,kmx,Lajos Veres,Leon Timmermans,Lukas Mai,Mathieu Arnold,Matthew Horsfall,Max Maischein,Michael Bunk,Nicholas Clark,Niels Thykier,Niko Tyni,Norman Koch,Olivier Mengué,Peter John Acklam,Peter Martini,Petr Písař,Philippe Bruhat (BooK),Pierre Bogossian,Rafael Garcia-Suarez,Randy Stauner,Reini Urban,Ricardo Signes,Rob Hoelz,Rostislav Skudnov,Sawyer X,Shirakata Kentaro,Shlomi Fish,Sisyphus,Slaven Rezic,Smylers,Steffen Müller,Steve Hay,Sullivan Beck,syber,Tadeusz Sośnierz,Thomas Sibley,Todd Rinaldo,Tony Cook,Vincent Pit,Vladimir Marek,Yaroslav Kuzmin,Yves Orton,Ævar Arnfjörð Bjarmason。

以上列表几乎肯定是不完整的,因为它是由版本控制历史自动生成的。特别是,它不包括向 Perl 错误跟踪器报告问题的贡献者(非常感谢)的姓名。

此版本中包含的许多更改源于 Perl 内核中包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。

有关 Perl 所有历史贡献者的更完整列表,请参阅 Perl 源代码分发中的 AUTHORS 文件。

报告错误

如果您发现您认为是错误的内容,您可能需要检查最近发布到 comp.lang.perl.misc 新闻组和 Perl 错误数据库的文章,网址为 https://rt.perl.org/。您也可以在 Perl 主页 https://www.perl5.cn/ 上找到信息。

如果您认为您遇到了未报告的错误,请运行随您的版本一起提供的 perlbug 程序。请务必将您的错误缩减为一个微小但足够的测试用例。您的错误报告以及 perl -V 的输出将被发送到 [email protected],由 Perl 移植团队进行分析。

如果您要报告的错误存在安全隐患,不适合发送到公开存档的邮件列表,请将其发送到 [email protected]。这指向一个封闭的订阅未存档邮件列表,其中包括所有核心提交者,他们将能够帮助评估问题的影響,找出解决方案,并帮助协调跨所有支持 Perl 的平台发布补丁以减轻或解决问题。请仅将此地址用于 Perl 内核中的安全问题,不要用于独立分发在 CPAN 上的模块。

另请参阅

Changes 文件,了解如何查看有关更改内容的详尽详细信息。

有关如何构建 Perl 的 INSTALL 文件。

有关一般事项的 README 文件。

有关版权信息的 ArtisticCopying 文件。