目录

名称

perl5200delta - perl v5.20.0 的新增内容

说明

本文档介绍了 5.18.0 版本和 5.20.0 版本之间的差异。

如果您要从早期版本(例如 5.16.0)升级,请首先阅读 perl5180delta,其中介绍了 5.16.0 和 5.18.0 之间的差异。

核心增强

实验性子例程签名

声明性语法,用于将参数列表解包到词法变量中。sub foo ($a,$b) {...} 检查参数数量并将参数放入词法变量中。签名不等于现有的 sub foo { my($a,$b) = @_; ... } 惯用法。签名只能通过启用非默认特性来使用,并会生成有关实验性质的警告。当启用签名时,通过禁用短原型语法来管理与原型的语法冲突。

有关详细信息,请参见 perlsub 中的“签名”

sub 现在采用 prototype 属性

在声明或定义 sub 时,现在可以在 prototype 属性内指定原型,而不是在名称后跟括号中指定。

例如,sub foo($$){} 可以改写为 sub foo : prototype($$){}

更一致的原型解析

子例程原型中的多个分号长期以来一直被容忍并被视为单个分号。有一种情况不会发生这种情况。原型以 "*" 或 ";*" 开头的子例程会影响裸字是否被视为方法名或子调用。现在这也适用于 ";;;*”。

长期以来允许在子例程原型中使用空格,因此 sub( $ $ ) 等同于 sub($$),但直到现在,在解析子例程时才将其剥离。因此,Scalar::Util::set_prototype 设置的原型中不允许使用空格。现在允许这样做,并且解析器不再剥离空格。这意味着 prototype &mysub 返回原始原型,包括空格和其他所有内容。

rand 现在使用一致的随机数生成器

以前,perl 会使用特定于平台的随机数生成器,在 libc rand()、random() 或 drand48() 之间变化。

这意味着 perl 随机数的质量会因平台而异,从 Windows 上 rand() 的 15 位到使用 drand48() 的 Linux 等 POSIX 平台上的 48 位。

perl 现在在其所有平台上使用自己的内部 drand48() 实现。这并不会使 perl 的 rand 在密码学上是安全的。[perl #115928]

新的切片语法

新的 %hash{...}%array[...] 语法返回键/值(或索引/值)对列表。请参阅 perldata 中的“键/值哈希切片”

实验性后缀取消引用

postderef 特性生效时,将设置以下语法等价项

$sref->$*;  # same as ${ $sref }  # interpolates
$aref->@*;  # same as @{ $aref }  # interpolates
$href->%*;  # same as %{ $href }
$cref->&*;  # same as &{ $cref }
$gref->**;  # same as *{ $gref }

$aref->$#*; # same as $#{ $aref }

$gref->*{ $slot }; # same as *{ $gref }{ $slot }

$aref->@[ ... ];  # same as @$aref[ ... ]  # interpolates
$href->@{ ... };  # same as @$href{ ... }  # interpolates
$aref->%[ ... ];  # same as %$aref[ ... ]
$href->%{ ... };  # same as %$href{ ... }

标记为插值的仅在关联的 postderef_qq 特性也已启用时才插值。此特性是实验性的,在使用时会触发 experimental::postderef 类别警告,除非它们被抑制。

有关更多信息,请参阅 perlref 的后缀解除引用语法部分

现在支持 Unicode 6.3

Perl 现在支持并附带 Unicode 6.3(尽管 Perl 也可以使用任何以前的 Unicode 版本重新编译)。Unicode 6.3 更改的详细列表位于 http://www.unicode.org/versions/Unicode6.3.0/

新的 \p{Unicode} 正则表达式模式属性

这是 \p{Any} 的同义词,并匹配 Unicode 定义的代码点 0 - 0x10FFFF 的集合。

更好的 64 位支持

在 64 位平台上,内部数组函数现在使用 64 位偏移量,允许 Perl 数组容纳超过 2**31 个元素(如果您有可用内存)。

正则表达式引擎现在支持超过 2**31 个字符的字符串。[perl #112790,#116907]

函数 PerlIO_get_bufsiz、PerlIO_get_cnt、PerlIO_set_cnt 和 PerlIO_set_ptrcnt 现在具有 SSize_t 而不是 int 返回值和参数。

use locale 现在适用于 UTF-8 区域设置

在此版本之前,仅支持单字节区域设置,例如 ISO 8859 系列。现在,越来越常见的 UTF-8 多字节区域设置也受支持。UTF-8 区域设置是指字符集为 Unicode 且编码为 UTF-8 的区域设置。在这种区域设置下,POSIX LC_CTYPE 类别操作(大小写转换(如 lc()"\U")和字符分类(\w\Dqr/[[:punct:]]/))的工作方式就像不在区域设置下一样,但就像在 use feature 'unicode_strings' 下一样,但遵循污染规则。在此版本中,排序仍按代码点顺序进行。[perl #56820]。

use locale 现在可以在没有区域设置功能的系统上编译

以前这样做会导致程序无法编译。在其范围内,程序的行为就像在“C”区域设置中一样。因此,为支持区域设置的平台编写的程序可以在没有区域设置的平台上运行,而无需更改。当然,尝试将区域设置更改为非“C”区域设置将失败。

更多区域设置初始化后备选项

如果 Perl 启动期间出现区域设置错误,它会立即放弃并尝试使用 "C" 区域设置。现在,它首先尝试使用环境变量给出的其他区域设置,如 "ENVIRONMENT" in perllocale 中所述。例如,如果 LC_ALLLANG 都已设置,并且使用 LC_ALL 区域设置失败,Perl 现在将尝试 LANG 区域设置,并且只有在该区域设置失败时,它才会回退到 "C"。在 Windows 机器上,如果环境变量给出的所有区域设置都失败,Perl 将尝试在使用 "C" 之前使用系统默认区域设置。

现在添加了 -DL 运行时选项,用于跟踪区域设置

这专为 Perl 核心开发者设计,以帮助调试有关区域设置的错误。

-F 现在暗示 -a-a 暗示 -n

以前,没有 -a-F 是无操作的,没有 -n-p-a 也是无操作的,有了此更改,如果你提供 -F,则 -a-n 都暗示,如果你提供 -a,则暗示 -n

你仍然可以使用 -p 来获得它的额外行为。[perl #116190]

$a 和 $b 警告豁免

sort 中使用的特殊变量 $a 和 $b 现在免于“仅使用一次”警告,即使在未使用 sort 的情况下也是如此。这使得 CPAN 模块更容易为类似目的提供使用 $a 和 $b 的函数。[perl #120462]

安全性

避免在解析期间读取 free()d 内存

在一种不寻常的情况下,Perl 程序以 heredoc 结尾,磁盘上的文件最后一行没有终止换行符,有可能在解析期间读取 free()d 内存。此问题现已修复。

不兼容的更改

do 不再可用于调用子例程

do SUBROUTINE(LIST) 形式自 Perl v5.0.0 起已导致弃用警告,现在是语法错误。

类似引号的转义更改

双引号字符串 ("..." 或 qq(...)) 或正则表达式中 \c 后面的字符现在必须是可打印字符,并且不能是 {

\B\b 后面的字面 { 现在是致命的。

这些在 perl v5.14.0 中已弃用。

污染在更多情况下发生;现在符合文档

这会影响正则表达式匹配以及在 use locale 范围内更改字符串的大小写(lc"\U" 等)。结果现在会根据操作而受到污染,无论字符串的内容是什么,正如文档(perlsec"SECURITY" in perllocale)所指出的那样。以前,对于大小写更改操作,如果字符串不包含任何大小写更改可能受区域设置影响的字符,则结果不会受到污染。例如,现在对空字符串或仅包含拉丁语 1 以上代码点的字符串执行 uc() 的结果会受到污染,而以前不会。这会导致更一致的污染结果。正则表达式模式会污染其非二进制结果(如 $&$2),当且仅当模式包含匹配取决于当前(可能受污染的)区域设置的元素时。与大小写更改函数一样,现在正在匹配的字符串的实际内容无关紧要,而以前则相关。例如,如果模式包含 \w,则即使匹配不必使用模式的该部分来成功或失败,结果也会受到污染,因为 \w 匹配的内容取决于区域设置。但是,例如,模式中的 . 不会启用污染,因为点匹配任何单个字符,而当前区域设置不会以任何方式更改匹配的内容和不匹配的内容。

\p{}\P{} 匹配已针对非 Unicode 代码点更改。

\p{}\P{} 仅由 Unicode 在 Unicode 定义的代码点(U+0000U+10FFFF)上定义。它们在匹配这些合法 Unicode 代码点时的行为保持不变,但对于代码点 0x110000 及以上则有更改。以前,Perl 将 \p{}\P{} 针对这些代码点匹配的结果视为 undef,这转换为“false”。对于 \P{},这随后被补充为“true”。当这种情况发生时,应该会发出警告。但是,各种优化可以防止发出警告,并且结果通常违反直觉,匹配及其看似补充都为 false。现在,所有非 Unicode 代码点都被视为典型的未分配 Unicode 代码点。这通常更符合预期。仅当结果与严格的 Unicode 方法以及 Perl 过去的行为存在争议时,才会发出警告。需要严格遵守 Unicode 的代码可以将此警告设为致命,然后 Perl 始终发出警告。

详细信息请参阅 "perlunicode 中的“Beyond Unicode code points”

\p{All} 已扩展为匹配所有可能的代码点

Perl 定义的正则表达式模式元素 \p{All},在 CPAN 上未使用,用于仅匹配 Unicode 代码点;现在它匹配所有可能的代码点;也就是说,它等效于 qr/./s。因此,\p{All} 不再与 \p{Any} 同义,后者继续仅匹配 Unicode 代码点,正如 Unicode 所说应该的那样。

Data::Dumper 的输出可能发生变化

根据转储的数据结构和为 Data::Dumper 设置的设置,转储的输出可能已从以前版本更改。

如果您有依赖于 Data::Dumper 确切输出的测试,它们可能会失败。

为避免代码中出现此问题,请针对从评估转储结构中获得的数据结构进行测试,而不是转储本身。

区域小数点字符不再泄漏到 use locale 范围之外

这实际上是一个错误修复,但一些代码开始依赖于该错误的存在,因此此更改在此处列出。程序正在运行的当前区域设置不应该在 use locale 的作用域之外对 Perl 代码可见。然而,到目前为止,在某些情况下,用于小数点的字符(通常是逗号)会泄漏到该作用域之外。如果您的代码受到此更改的影响,只需添加一个 use locale

Windows 套接字错误代码分配给 $! 现在更喜欢 errno.h 值,而不是 WSAGetLastError() 值

在以前版本的 Perl 中,Windows 套接字错误代码(由 WSAGetLastError() 返回)被分配给 $!,并且一些常量(例如 ECONNABORTED,不在 VC++(或 gcc 的各种 Windows 端口)中的 errno.h 中)被定义为相应的 WSAE* 值,以便允许 $! 根据 ErrnoPOSIX 导出的 E* 常量进行测试。

这很好用,直到 VC++ 2010 及更高版本,它引入了新的 E* 常量,其值 > 100 进入 errno.h,包括一些由 perl(重新)定义为 WSAE* 值的常量。当针对使用 errno.h 常量的原始定义的其他库链接 XS 代码时,这会导致问题。

为了避免这种不兼容,perl 现在尽可能将 WSAE* 错误代码映射到 E* 值,并将这些值分配给 $!。由 ErrnoPOSIX 导出的 E* 常量已更新以匹配,以便在以前可能的任何地方测试 $!,都将继续按预期工作,并且现在从这些模块中导出了 errno.h 中找到的所有 E* 常量,其原始 errno.h 值。

为了避免在将 WSAE* 值分配给 $! 的现有 Perl 代码中出现中断,perl 现在会拦截分配,并执行与内部在分配给 $! 本身时使用的相同的映射到 E* 值的操作。

但是,仍然存在一个向后不兼容性:将 $! 与以前分配给 $! 的 WSAE* 错误代码的数值进行比较的现有 Perl 代码,现在将在已分配相应 E* 值的情况下中断。这仅适用于那些 E* 值 < 100,这些值始终从 ErrnoPOSIX 中导出,其原始 errno.h 值,因此无法用于 WSAE* 错误代码测试(例如,WSAEINVAL 为 10022,但相应的 EINVAL 为 22)。(如果存在,E* 值 > 100,则无论如何都重新定义为 WSAE* 值,因此可以通过使用 E* 常量来实现兼容性,无论是在此更改之前还是之后,都可以使用不同的数值。)

函数 PerlIO_vsprintfPerlIO_sprintf 已被移除

这两个函数未记录、在 CPAN 中未使用且存在问题,因此已将其移除。

弃用

/\C/ 字符类

/\C/ 正则表达式字符类已弃用。从 perl 5.22 开始,它将生成警告,从 perl 5.24 开始,它将成为正则表达式编译器错误。如果您需要检查构成 UTF8 编码字符的各个字节,请首先对字符串(或副本)使用 utf8::encode()

变量名称中的文字控制字符

此弃用影响诸如 $\cT 之类的事物,其中 \cT 是源代码中的一个文本控制(例如 NAKNEGATIVE ACKNOWLEDGE 字符)。令人惊讶的是,最初这似乎是访问诸如 $^T 之类变量的规范方式,而插入符号形式只是作为一种替代方式添加的。

文本控制形式被弃用的原因主要有两个。它存在可能无法修复的错误,例如 $\cI 无法作为 $^I 的别名使用,并且它们的使用无法移植到非 ASCII 平台:虽然 $^T 在任何地方都能使用,但 \cT 在 EBCDIC 中是空白。[perl #119123]

$/ 中对非整数和非正整数的引用

$/ 设置为对零的引用或对负整数的引用现在已被弃用,并且将完全表现得好像将其设置为 undef 一样。如果您想要 slurp 行为,请将 $/ 明确设置为 undef

$/ 设置为对非整数的引用现在已被禁止,并且会引发错误。Perl 从未记录过在这种情况下会发生什么,虽然它过去的行为与将 $/ 设置为引用的地址相同,但在未来它可能会表现得不同,因此我们禁止了这种用法。

POSIX 中的字符匹配例程

现在弃用 POSIX 模块中使用以下任何函数:isalnumisalphaiscntrlisdigitisgraphislowerisprintispunctisspaceisupperisxdigit。这些函数有错误,并且无法处理 UTF-8 编码的字符串。有关更多信息,请参阅 POSIX 中的条目。

在从它们被调用的代码中的每个位置首次调用它们中的任何一个时,都会发出警告。(因此,循环中的重复语句只会引发一次警告。)

基于解释器的线程现在不鼓励使用

Perl 提供的“基于解释器的线程”并不是人们可能期望或希望的多任务快速轻量级系统。线程的实现方式使得它们很容易被误用。很少有人知道如何正确使用它们或能够提供帮助。

官方不鼓励在 perl 中使用基于解释器的线程。

模块移除

以下模块将在未来的版本中从核心发行版中移除,并且届时需要从 CPAN 安装。需要这些模块的 CPAN 上的发行版需要将它们列为先决条件。

这些模块的核心版本现在将发出 “deprecated” 类别的警告来提醒您这一事实。要消除这些弃用警告,请从 CPAN 安装有问题的模块。

请注意,计划从核心移除这些模块并不反映对代码质量的判断,也不应将其视为停止使用它们的建议。它们从核心中的排除主要取决于它们对引导完全功能的、支持 CPAN 的 Perl 安装的必要性,而不是对它们设计的担忧。

CGI 及其关联的 CGI:: packages
inc::latest
Package::Constants
Module::Build 及其关联的 Module::Build:: packages

实用程序移除

以下实用程序将在未来版本中从核心发行版中移除,届时需要从 CPAN 安装。

find2perl
s2p
a2p

性能增强

模块和实用程序

新模块和实用程序

已更新的模块和实用程序

文档

新文档

perlrepository

此文档已在 Perl v5.14 中移除(实际上已重命名为 perlgit 并进行了重大修改),导致 Perl 文档网站将 Perl v5.12 中的过期版本显示为最新版本。它现已以存根形式恢复,指导读者获取最新信息。

对现有文档的更改

perldata

perldebguts

perlexperiment

perlfunc

perlguts

perlhack

perlhacktips

perllexwarn

perllocale

perlop

perlopentut

perlre

perlreguts

perlsub

perltrap

perlunicode

perlvar

perlxs

诊断

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

新诊断

新错误

新警告

对现有诊断的更改

实用工具更改

a2p

bisect.pl

git 二分工具 Porting/bisect.pl 已得到许多增强。

它作为源代码分发的一部分提供,但未安装,因为它不是自包含的,因为它依赖于在 git 检出中运行。另请注意,它不会尝试修复测试、更正运行时错误或制作有用的东西进行安装 - 它的目的是对任何历史修订进行最小的更改,以便尽可能“按原样”构建和运行,从而使 git bisect 易于使用。

find2perl

perlbug

配置和编译

测试

平台支持

新平台

Android

现在可以在 Android 上构建 Perl,无论是原生构建还是通过交叉编译,适用于所有三种当前可用的架构(ARM、MIPS 和 x86),以及各种版本。

Bitrig

已为 Bitrig(OpenBSD 的一个分支)添加了编译支持。

FreeMiNT

已为 FreeMiNT 添加了支持,FreeMiNT 是 Atari ST 系统及其继任者的免费开源操作系统,基于 Atari 正式采用的原始 MiNT。

Synology

Synology 在相对便宜的 CPU(如 Marvell Kirkwood mv6282 - ARMv5tel 或 Freescale QorIQ P1022 ppc - e500v2)上为其 NAS 盒子配备精简的 Linux 发行版 (DSM),这些 CPU 不适用于工作站或开发。现在应该可以构建这些盒子。基本问题是工具的非标准位置。

已停用平台

sfio

已删除与支持 sfio I/O 系统相关的代码。

Perl 5.004 添加了使用 sfio(AT&T 的安全/快速 I/O 库)的本机 API 的支持。此代码仍然使用 v5.8.0 构建,尽管许多回归测试失败,但在 v5.8.1 发布之前无意中被破坏,这意味着它在自那时以来发布的任何 Perl 版本上都无法正常工作。十多年来,我们没有收到有关此问题的错误报告,因此很明显,没有人使用 Perl 任何版本上的此功能,而这些版本在某种程度上仍然受支持。

AT&T 3b1

已删除对 3b1(也称为 AT&T Unix PC(和类似的 AT&T 7300))的配置支持。

DG/UX

DG/UX 是 Data General 销售的 Unix。最后一次发布是在 2001 年 4 月。它只在 Data General 自己的硬件上运行。

EBCDIC

在没有常规烟雾报告来源的情况下,旨在支持本机 EBCDIC 平台的代码将在 5.22.0 之前从 perl 中移除。

平台特定说明

Cygwin
  • 已连接句柄上的 recv() 将使用工作缓冲区中碰巧存在的任何内容填充返回的发件人地址。recv() 现在使用类似于 Win32 recv() 包装器的解决方法,并在 recvfrom(2) 不修改提供的地址长度时返回空字符串。[perl #118843]

  • 修复了 Cygwin 1.7.28 上 cygwin.c 中的一个构建错误。

    测试现在处理 cygserver 未运行时发生的错误。

GNU/Hurd

构建不再需要 BSD 兼容性库 libbsd

Linux

提示文件现在仅在同时需要 libgdbm 本身时才查找 libgdbm_compat。没有后者,前者永远不会有用,并且在某些情况下,包括它实际上可能会阻止构建。

Mac OS

构建系统现在遵循运行 Configure 的用户提供的 ld 设置。

MidnightBSD

objformat 已从 MidnightBSD 的 0.4-RELEASE 版本中移除,并在早期版本中已弃用。这导致构建环境错误地配置为 a.out 而不是 elf。此问题现已得到纠正。

混合端平台

支持混合端平台上的 packunpack 操作的代码已移除。我们认为 Perl 长期以来无法在混合端架构(例如 PDP-11)上构建,因此我们认为此更改不会影响任何能够构建 v5.18.0 的平台。

VMS
  • 在 Perl 5.16.0 中损坏的 PERL_ENV_TABLES 功能用于控制 perl 启动时的 %ENV 的填充,现已修复。

  • 跳过 opendir() 中远程上的访问检查。[perl #121002]

  • glob() 运算符返回的路径中 glob 元字符的检查已被替换为 VMS 通配符的检查。这节省了大量不必要的 lstat() 调用,使得一些简单的 glob 操作变得快了 60-80%。

Win32
  • Win32 上的 renamelink 现在在适当的时候将 $! 设置为 ENOSPC 和 EDQUOT。[perl #119857]

  • 用于将部分或(几乎)所有扩展静态链接(到 perl520.dll,以及单独的 perl-static.exe)的 BUILD_STATIC 和 ALL_STATIC Makefile 选项对于 MinGW 构建已损坏。此问题现已修复。

    ALL_STATIC 选项也已改进,以包括 Encode 和 Win32 扩展(对于 VC++ 和 MinGW 构建)。

  • 已添加使用 Visual C++ 2013 构建的支持。目前有两个可能的测试失败(请参阅 perlwin32 中的“在 Windows 上测试 Perl”),希望很快就能解决。

  • 已添加使用 Intel C++ 编译器构建的实验性支持。可以使用 nmake Makefile (win32/Makefile) 和 dmake Makefile (win32/makefile.mk)。由于 cpan/CGI/t/url.t,此时“nmake test”将不会通过。

  • 从 5.18.0 开始,使用 perlfunc 中的“kill” 和负信号来终止进程树已损坏。在此错误中,kill 始终对负信号返回 0,即使对于有效的 PID 也是如此,并且没有终止任何进程。此问题已修复 [perl #121230]。

  • 通过减少每次 require()(仅适用于 miniperl.exe)的通常会失败的 I/O 调用次数,已显著减少在 Windows 上构建 perl 所需的时间(通常会节省 30-40% 的时间)。[GH #13566]

  • 由于错误导致用于测试的超时监视器在测试完成后无法取消,并且在运行下一个测试文件之前经过了完整的超时时间,因此从运行 make test 中删除了大约 15 分钟的空闲休眠时间。 [GH #13647]

  • 在没有伪 fork 的情况下构建的 perl(此错误不受伪 fork 构建的影响)中,使用 kill() 和负信号终止进程树会导致 kill() 反转返回的值。例如,如果 kill() 终止了 1 个进程树 PID,则它返回 0 而不是 1,如果向 kill() 传递了 2 个无效的 PID,则它返回 2 而不是 0。自 Win32 上实现进程树终止功能以来,情况可能一直如此。现在已更正为遵循记录的行为。 [GH #13595]

  • 在构建 64 位 perl 时,构建过程中使用的 miniperl.exe 中未初始化的内存读取可能导致创建 4GB 的 wperl.exe。此问题现已修复。(请注意,perl.exe 本身不受影响,但显然 wperl.exe 将完全损坏。)[GH #13677]

  • 现在可以使用 http://www.mingw.org 中的 gcc 版本 4.8.1 构建 Perl。以前由于 perl 源文件中 DllMain() 的定义不正确,导致此问题损坏。使用 w32api 包的版本 4 时,较早的 gcc 版本也受到影响。从 http://mingw-w64.sourceforge.net/ 获得的 gcc 版本不受影响。 [GH #13733]

  • 当在 NTFS 驱动器上使用 Windows 操作系统在 FAT 驱动器上构建 perl 时,测试框架现在没有任何故障。 [GH #6348]

  • 在 fork() 模拟中克隆上下文堆栈时,Perl_cx_dup() 将崩溃,因为它访问了不包含任何参数的上下文堆栈条目的参数信息,例如 &foo;[GH #13763]

  • [GH #12161] 引入,从 5.18.0 开始,在大多数 Win32 Perl 中,每次调用 system 和反引号 ( `` ) 时都会出现内存泄漏,此问题已得到修复。只有在 Win32 Perl 构建中启用了伪 fork,并且在 Server 2003 R2 或更新的操作系统上运行该构建时,才会发生内存泄漏。WinXP SP3 上不会出现泄漏。 [GH #13741]

WinCE
  • XS 模块的构建已基本恢复。几个模块仍然无法构建,但现在只需几个额外的补丁(针对 SocketExtUtils::MakeMaker),就可以在 WinCE 上构建 Perl,希望很快就能合并这些补丁。

  • 现在可以通过运行 nmake -f Makefile.ce all 在 WinCE 上一次性构建 Perl,无需用户干预。

    已恢复对使用 EVC(嵌入式 Visual C++)4 进行构建的支持。还可以使用 Visual C++ 2005 或 2008 的智能设备构建 Perl。

内部更改

选定的错误修复

正则表达式

Perl 5 调试器和 -d

词法子例程

其他所有内容

已知问题

讣告

27 岁的 Diana Rosa 来自里约热内卢,于 2014 年 5 月 10 日与她一直挂在电脑屏幕上的毛绒骆驼一起安息。她是一位热情的 Perl 黑客,热爱这门语言及其社区,并且从未错过过 Rio.pm 活动。她是一位真正的艺术家,热衷于编写代码、演唱咏叹调和涂鸦墙壁。我们永远不会忘记你。

Greg McCarroll 于 2013 年 8 月 28 日去世。

Greg 因许多正当理由而闻名。他是第一届 YAPC::Europe 的组织者之一,该活动以一场临时拍卖会结束,他疯狂地试图筹集额外资金以避免会议亏损。Greg 是错误地迟到一周参加 london.pm 会议的人;几年后,他在 YAPC::Europe 拍卖会上出售了官方会议日期的选择权,最终作为 london.pm 的光荣领导者,他继承了他自己制造的 irreverent 混乱。

你总是乐于助人、友善且乐观开朗,我们会想念你,但永远不会忘记你。

鸣谢

Perl 5.20.0 代表了自 Perl 5.18.0 以来大约 12 个月的开发时间,包含来自 124 位作者的 2,900 个文件中大约 470,000 行的更改。

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

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

Aaron Crane、Abhijit Menon-Sen、Abigail、Abir Viqar、Alan Haggai Alavi、Alan Hourihane、Alexander Voronov、Alexandr Ciornii、Andy Dougherty、Anno Siegel、Aristotle Pagaltzis、Arthur Axel 'fREW' Schmidt、Brad Gilbert、Brendan Byrd、Brian Childs、Brian Fraser、Brian Gottreu、Chris 'BinGOs' Williams、Christian Millour、Colin Kuskie、Craig A. Berry、Dabrien 'Dabe' Murphy、Dagfinn Ilmari Mannsåker、Daniel Dragan、Darin McBride、David Golden、David Leadbeater、David Mitchell、David Nicol、David Steinbrunner、Dennis Kaarsemaker、Dominic Hargreaves、Ed Avis、Eric Brine、Evan Zacks、Father Chrysostomos、Florian Ragwitz、François Perrad、Gavin Shelley、Gideon Israel Dsouza、Gisle Aas、Graham Knop、H.Merijn Brand、Hauke D、Heiko Eissfeldt、Hiroo Hayashi、Hojung Youn、James E Keenan、Jarkko Hietaniemi、Jerry D. Hedden、Jess Robinson、Jesse Luehrs、Johan Vromans、John Gardiner Myers、John Goodyear、John P. Linderman、John Peacock、kafka、Kang-min Liu、Karen Etheridge、Karl Williamson、Keedi Kim、Kent Fredric、kevin dawson、Kevin Falcone、Kevin Ryde、Leon Timmermans、Lukas Mai、Marc Simpson、Marcel Grünauer、Marco Peereboom、Marcus Holland-Moritz、Mark Jason Dominus、Martin McGrath、Matthew Horsfall、Max Maischein、Mike Doherty、Moritz Lenz、Nathan Glenn、Nathan Trapuzzano、Neil Bowers、Neil Williams、Nicholas Clark、Niels Thykier、Niko Tyni、Olivier Mengué、Owain G. Ainsworth、Paul Green、Paul Johnson、Peter John Acklam、Peter Martini、Peter Rabbitson、Petr Písař、Philip Boulain、Philip Guenther、Piotr Roszatycki、Rafael Garcia-Suarez、Reini Urban、Reuben Thomas、Ricardo Signes、Ruslan Zakirov、Sergey Alekseev、Shirakata Kentaro、Shlomi Fish、Slaven Rezic、Smylers、Steffen Müller、Steve Hay、Sullivan Beck、Thomas Sibley、Tobias Leich、Toby Inkster、Tokuhiro Matsuno、Tom Christiansen、Tom Hukins、Tony Cook、Victor Efimov、Viktor Turskyi、Vladimir Timofeev、YAMASHINA Hio、Yves Orton、Zefram、Zsbán Ambrus、Ævar Arnfjörð Bjarmason。

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

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

如需查看所有 Perl 历史贡献者的更完整列表,请参阅 Perl 源代码发行版中的 AUTHORS 文件。

报告错误

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

如果您认为您遇到了未报告的错误,请运行发行版中包含的 perlbug 程序。务必将错误精简为一个微小但足够的测试用例。您的错误报告连同 perl -V 的输出将发送到 [email protected],由 Perl 移植团队进行分析。

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

另请参阅

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

INSTALL 文件,了解如何构建 Perl。

README 文件,了解一般信息。

ArtisticCopying 文件,了解版权信息。