perl5240delta - perl v5.24.0 的新增功能
本文档描述了 5.22.0 版本和 5.24.0 版本之间的差异。
使用 postderef
和 postderef_qq
功能不再会发出警告。以前禁用他们之前使用的 experimental::postderef
警告类别的现有代码将继续工作。postderef
功能不起作用;所有 Perl 代码都可以使用后缀解除引用,无论作用域中有什么功能声明。5.24
功能包现在包括 postderef_qq
功能。
有关此版本中内容的详细信息,请参阅 http://www.unicode.org/versions/Unicode8.0.0/。
到目前为止,未检测到关闭就地编辑的输出文件失败,这意味着输入文件可能会在编辑未成功完成的情况下被覆盖。现在,当无法成功关闭输出文件时,将引发异常。
\b{lb}
边界lb
代表换行符。它是一个 Unicode 属性,用于确定文本行适合换行的位置(通常是为了在不溢出可用水平空间的情况下输出)。此功能长期以来一直由 Unicode::LineBreak 模块提供,但现在核心 Perl 中有一个轻量级、不可自定义的版本,适用于许多目的。
qr/(?[ ])/
现在可在 UTF-8 区域设置中工作扩展方括号字符类 现在在 use locale
生效时将成功编译。已编译的模式将使用标准 Unicode 规则。如果运行时区域设置不是 UTF-8 区域设置,则会发出警告,并且无论如何都会使用标准 Unicode 规则。由于结果实际上不依赖于区域设置,因此不会进行污染。
<<
和 >>
) 现在定义得更明确负移位是反向移位:左移位变为右移位,右移位变为左移位。
使用本机整数(或更多)中的位数移位为零,但当在 use integer
下对负值进行“过移位”时除外,在这种情况下,结果为 -1(算术移位)。
到目前为止,负移位和过移位尚未定义,因为它们依赖于 C 实现碰巧要执行的操作。例如,对于过移位,常见的 C 行为是“模移位”
1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior.
# And the same for <<, while Perl now produces 0 for both.
现在,无论底层 C 实现如何,这些行为在 Perl 下都定义得很好。但是,请注意,您仍然受到本机整数宽度限制:您需要知道可以向左移动多远。例如,您可以使用
use Config;
my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3.
如果您需要在左移位上使用更多位,则可以使用例如 bigint
pragma 或 CPAN 中的 Bit::Vector
模块。
也就是说,sprintf '|%.*2$d|', 2, 3
现在返回 |002|
。这扩展了现有的重新排序机制(允许对用作格式字段、宽度和矢量分隔符的参数进行重新排序)。
SA_SIGINFO
向 sigaction
回调提供更多字段将 SA_SIGINFO
标志传递给 sigaction 时,如果平台支持,现在将 errno
、status
、uid
、pid
、addr
和 band
字段包含在传递给处理程序的哈希中。
以前,如果 perl 找到 hashbang 路径,它会重定向到另一个解释器,除非路径包含“perl”(请参阅 perlrun)。为了提高与 Perl 6 的兼容性,此行为已扩展为在“perl”后跟“6”时也进行重定向。
mkstemp(3)
之前设置适当的 umask在 5.22 中,perl 开始在调用 mkstemp(3)
之前将 umask 设置为 0600,并在之后恢复它。这错误地告知 open(2)
在应用给定模式之前从该模式中剥离所有者读写位,而不是只保留那些位。
在 mkstemp(3)
中使用模式 0666 的系统(如旧版本的 glibc)会创建一个权限为 0066 的文件,无论当前 umask 如何,都会保留世界读写权限。
通过改用 umask 0177 已经修复了此问题。[perl #127322]
这是 CVE-2015-8608。有关更多信息,请参阅 [GH #15067]
这是 CVE-2015-8607。有关更多信息,请参阅 [GH #15084]
crypt()
中访问未初始化的内存添加了验证,该验证将检测盐中的短盐和无效字符。 [GH #15091]
environ
中删除重复的环境变量以前,如果环境变量在 environ[]
中出现多次,则 %ENV
将包含该名称的最后一个条目,而典型的 getenv()
将返回第一个条目。我们现在确保 %ENV
包含与 getenv
返回的内容相同的内容。
其次,我们从 environ[]
中删除重复项,因此如果在 %ENV
中设置了具有该名称的设置,我们不会向子进程传递不安全的值。
[CVE-2016-2381]
autoderef
特性已被删除实验性 autoderef
特性(允许对标量参数调用 push
、pop
、shift
、unshift
、splice
、keys
、values
和 each
)已被视为不成功。它现已删除;尝试使用该特性(或禁用它先前触发的 experimental::autoderef
警告)现在会产生异常。
my $_
在 Perl 5.10 中引入,随后引起了很多混乱,没有明显的解决方案。在 Perl 5.18.0 中,它被设为实验性,理论上它将被删除或以一种不太混乱(但向后不兼容)的方式重新设计。在随后的几年里,没有提出任何替代方案。该特性现已删除,并且无法编译。
qr/\b{wb}/
现在根据 Perl 预期进行定制现在更适合作为普通 \b
的直接替换,但为解析自然语言提供了更好的结果。以前它严格遵循当前的 Unicode 规则,要求它在每个空白字符之间匹配。现在它通常不会在空白范围内匹配,表现得像 \b
一样。请参阅 perlrebackslash 中的“\b{wb}”
一些在运行时出错的正则表达式模式现在根本无法编译。
现在在模式编译时检查使用 \p{}
和 \P{}
正则表达式模式构造的几乎所有 Unicode 属性的有效性,无效的属性将导致程序无法编译。在早期版本中,此检查通常会推迟到运行时。每当错误检查从运行时移到编译时,错误代码就会 100% 被捕获,而之前只有在实际执行违规部分时才会被捕获,对于不可达的代码来说,可能永远不会被捕获。
use re "strict"
下不允许使用 qr/\N{}/
空 \N{}
没有意义,但为了向后兼容,它被接受为不执行任何操作,尽管默认情况下会发出弃用警告。但现在在实验性特性 "re 中的 'strict' 模式"下,这是一个致命错误。
不再允许在另一个 my
、our
或 state
声明内进行 my
、our
或 state
声明。
例如,这些现在是致命的
my ($x, my($y));
our (my $x);
/\C/
字符类已被移除。此正则表达式字符类在 v5.20.0 中已弃用,并且自 v5.22.0 以来一直产生弃用警告。现在它是一个编译时错误。如果您需要检查构成 UTF8 编码字符的各个字节,请首先对字符串(或副本)使用 utf8::encode()
。
chdir('')
不再 chdir 到主目录自 perl v5.8 以来,使用 chdir('')
或 chdir(undef)
来 chdir 到主目录已弃用,现在将失败。请改用 chdir()
。
到目前为止,在 ASCII 平台上,变量名可以包含非图形 ASCII 控制字符(序数 0 到 31 以及 127,即 C0 控制和 DELETE
)是合法的。此用法自 v5.20 起已弃用,并且现在会导致语法错误。这些名称引用的变量是特殊的,由 Perl 保留,供其在现在或将来选择使用。每个此类变量都有另一种拼写方式。它不使用单个非图形控制字符,而是使用以脱字符号开头的两个字符序列,如 $^]
和 ${^GLOBAL_PHASE}
。详情请参阅 perlvar。在不在 use utf8
下使用变量名中某些非图形非 ASCII 字符仍然是合法的,尽管不明智且已弃用(会引发弃用警告)。任何代码都不应该这样做,因为所有此类变量都由 Perl 保留,而 Perl 目前没有定义任何此类变量(但可以在任何时候不经通知地进行定义)。
$Carp::MaxArgNums
中的一个 off by one 问题已得到修复$Carp::MaxArgNums
应该是要显示的参数数量。在此版本之前,它相反显示 $Carp::MaxArgNums
+ 1 个参数,这与文档相反。
(?[...])
中的 [...]
中使用空格和制表符。实验性的扩展方括号字符类可以在其中包含常规方括号字符类。它们与常规方括号字符类不同,因为通常会忽略空格,除非在空格前加上反斜杠进行转义。现在,被忽略的空格仅限于制表符 \t
和空格字符。以前,它可以是任何空格。请参阅 "perlrecharclass 中的“扩展方括号字符类”。
IV_MAX
的代码点Unicode 定义范围在 0..0x10FFFF
内的代码点。一些标准曾经将它们定义为最高 2**31 - 1,但 Perl 允许它们达到所用平台上的单词所能容纳的最高值。但是,在某些构造中使用高于平台的 IV_MAX
的代码点会中断,尤其是 tr///
、涉及量词的正则表达式模式,以及一些算术和比较操作,例如作为循环的上限。现在,使用此类代码点会引发弃用警告,除非关闭该警告类别。IV_MAX
在 32 位平台上通常为 2**31 -1,在 64 位平台上为 2**63-1。
字符串按位运算符将其操作数视为字节字符串,而超出 0xFF 的值在此上下文中毫无意义。若要对编码的字节进行操作,请首先对字符串进行编码。若要对代码点的数字值进行操作,请使用 split
和 map ord
。将来,此警告将被异常替换。
sysread()
、syswrite()
、recv()
和 send()
在 :utf8 句柄上已弃用sysread()
、recv()
、syswrite()
和 send()
运算符在具有 :utf8
层的句柄上已弃用,无论该层是显式的还是隐式的,例如,在 :encoding(UTF-16LE)
层中。
sysread()
和 recv()
目前仅对流使用 :utf8
标志,而忽略实际层。由于 sysread()
和 recv()
不执行 UTF-8 验证,因此最终可能会创建编码无效的标量。
类似地,syswrite()
和 send()
仅使用 :utf8
标志,否则会忽略任何层。如果设置了该标志,则两者都会以 UTF-8 编码写入值,即使该层是某种不同的编码,例如上面的示例。
理想情况下,所有这些运算符都将完全忽略 :utf8
状态,仅使用字节,但这会导致在不知不觉中中断现有代码。为了避免这种情况,未来版本的 perl 将在对具有 :utf8
层的句柄调用 sysread()
、recv()
、syswrite()
或 send()
时引发异常。
范围进入和退出的开销已大大减少,因此例如子例程调用、循环和基本块现在都更快了。此空函数调用现在执行的时间大约减少了三分之一
sub f{} f();
许多语言(如中文)不区分大小写。Perl 现在已了解大多数常用语言,并在程序尝试更改其大小写(如 ucfirst()
)或不区分大小写地匹配(qr//i
)时跳过大部分工作。这将加速程序(如 Web 服务器),该程序可以在多种语言上运行,而它在不区分大小写的语言上运行时。
/fixed-substr/
已变得快得多。
在具有 libc memchr()
实现的平台上,该实现充分利用了底层硬件支持,包含固定子字符串的模式现在通常会快得多;例如,在最近的 x86_64 CPU 上使用 glibc 时,这
$s = "a" x 1000 . "wxyz";
$s =~ /wxyz/ for 1..30000
现在快了约 7 倍。在 memchr()
较慢的系统上(例如 32 位 ARM Raspberry Pi),速度提升会很小或没有。相反,某些病态情况(如 "ab" x 1000 =~ /aa/
)现在会变慢;在 rPi 上慢至 3 倍,在 x86_64 上慢 1.5 倍。
更快的加法、减法和乘法。
自 5.8.0 以来,由于需要支持 64 位整数,算术变得更慢。为了处理 64 位整数,需要检查更多边界情况,这会增加时间。我们现在检测到不需要检查这些边界情况的常见情况,并对它们进行特殊处理。
通过在内部将处理多个情况的函数拆分为不同的函数,使前增量、前减量、后增量和后减量变得更快。
已删除 XSUB 和 const 子例程的 Perl 调试器数据结构(请参阅 perldebguts 中的“调试器内部”)。这为每个 XSUB 和 const 子例程来自的唯一 .c
文件删除了一个 glob/标量组合。在启动时(perl -e"0"
),创建了大约六个 glob/标量调试器组合。加载 XS 模块会创建更多 glob/标量组合。无论是否使用 perl 调试器,都会创建这些内容,尽管它无论如何都无法调试 C 代码
在 Win32 上,如果文件或目录不存在,则 stat
ing 或 -X
ing 路径现在比以前快 3.5 倍。
列表赋值中的单个参数现在稍快
($x) = (...);
(...) = ($x);
在编译正则表达式模式时,现在使用的峰值内存更少。
arybase 已从 0.10 版升级到 0.11 版。
Attribute::Handlers 已从 0.97 版升级到 0.99 版。
autodie 已从 2.26 版升级到 2.29 版。
autouse 已从 1.08 版升级到 1.11 版。
B 已从 1.58 版升级到 1.62 版。
B::Deparse 已从 1.35 版升级到 1.37 版。
base 已从 2.22 版升级到 2.23 版。
Benchmark 已从 1.2 版升级到 1.22 版。
bignum 已从 0.39 版升级到 0.42 版。
bytes 已从 1.04 版升级到 1.05 版。
Carp 已从 1.36 版升级到 1.40 版。
Compress::Raw::Bzip2 已从 2.068 版升级到 2.069 版。
Compress::Raw::Zlib 已从 2.068 版升级到 2.069 版。
Config::Perl::V 已从 0.24 版升级到 0.25 版。
CPAN::Meta 已从 2.150001 版升级到 2.150005 版。
CPAN::Meta::Requirements 已从 2.132 版升级到 2.140 版。
CPAN::Meta::YAML 已从 0.012 版升级到 0.018 版。
Data::Dumper 已从 2.158 版升级到 2.160 版。
Devel::Peek 已从 1.22 版升级到 1.23 版。
Devel::PPPort 已从 3.31 版升级到 3.32 版。
Dumpvalue 已从 1.17 版升级到 1.18 版。
DynaLoader 已从 1.32 版升级到 1.38 版。
Encode 已从 2.72 版升级到 2.80 版。
encoding 已从 2.14 版升级到 2.17 版。
encoding::warnings 已从 0.11 版升级到 0.12 版。
English 已从 1.09 版升级到 1.10 版。
Errno 已从 1.23 版升级到 1.25 版。
experimental 已从 0.013 版升级到 0.016 版。
ExtUtils::CBuilder 已从 0.280221 版升级到 0.280225 版。
ExtUtils::Embed 已从 1.32 版升级到 1.33 版。
ExtUtils::MakeMaker 已从 7.04_01 版升级到 7.10_01 版。
ExtUtils::ParseXS 已从 3.28 版升级到 3.31 版。
ExtUtils::Typemaps 已从 3.28 版升级到 3.31 版。
feature 已从 1.40 版升级到 1.42 版。
fields 已从 2.17 版升级到 2.23 版。
File::Find 已从 1.29 版升级到 1.34 版。
File::Glob 已从 1.24 版升级到 1.26 版。
File::Path 已从 2.09 版升级到 2.12_01 版。
File::Spec 已从 3.56 版升级到 3.63 版。
Filter::Util::Call 已从 1.54 版升级到 1.55 版。
Getopt::Long 已从 2.45 版升级到 2.48 版。
Hash::Util 已从 0.18 版升级到 0.19 版。
Hash::Util::FieldHash 已从 1.15 版升级到 1.19 版。
HTTP::Tiny 已从 0.054 版升级到 0.056 版。
I18N::Langinfo 已从 0.12 版升级到 0.13 版。
if 已从 0.0604 版升级到 0.0606 版。
IO 已从 1.35 版升级到 1.36 版。
IO-Compress 已从 2.068 版升级到 2.069 版。
IPC::Open3 已从 1.18 版升级到 1.20 版。
IPC::SysV 已从 2.04 版升级到 2.06_01 版。
List::Util 已从 1.41 版升级到 1.42_02 版。
locale 已从 1.06 版升级到 1.08 版。
Locale::Codes 已从 3.34 版升级到 3.37 版。
Math::BigInt 已从 1.9997 版升级到 1.999715 版。
Math::BigInt::FastCalc 已从 0.31 版升级到 0.40 版。
Math::BigRat 已从 0.2608 版升级到 0.260802 版。
Module::CoreList 已从 5.20150520 版升级到 5.20160320 版。
Module::Metadata 已从 1.000026 版升级到 1.000031 版。
mro 已从 1.17 版升级到 1.18 版。
ODBM_File 已从 1.12 版升级到 1.14 版。
Opcode 已从 1.32 版升级到 1.34 版。
parent 已从 0.232 版升级到 0.234 版。
Parse::CPAN::Meta 已从 1.4414 版升级到 1.4417 版。
Perl::OSType 已从 1.008 版升级到 1.009 版。
perlfaq 已从 5.021009 版升级到 5.021010 版。
PerlIO::encoding 已从 0.21 版升级到 0.24 版。
PerlIO::mmap 已从 0.014 版升级到 0.016 版。
PerlIO::scalar 已从 0.22 版升级到 0.24 版。
PerlIO::via 已从 0.15 版升级到 0.16 版。
Pod::Functions 已从 1.09 版升级到 1.10 版。
Pod::Perldoc 已从 3.25 版升级到 3.25_02 版。
Pod::Simple 已从 3.29 版升级到 3.32 版。
Pod::Usage 已从 1.64 版升级到 1.68 版。
POSIX 已从 1.53 版升级到 1.65 版。
Scalar::Util 已从 1.41 版升级到 1.42_02 版。
SDBM_File 已从 1.13 版升级到 1.14 版。
SelfLoader 已从 1.22 版升级到 1.23 版。
Socket 已从 2.018 版升级到 2.020_03 版。
Storable 已从 2.53 版升级到 2.56 版。
strict 已从 1.09 版升级到 1.11 版。
Term::ANSIColor 已从 4.03 版升级到 4.04 版。
Term::Cap 已从 1.15 版升级到 1.17 版。
Test 已从 1.26 版升级到 1.28 版。
Test::Harness 已从 3.35 版升级到 3.36 版。
Thread::Queue 已从 3.05 版升级到 3.08 版。
threads 已从 2.01 版升级到 2.06 版。
threads::shared 已从 1.48 版升级到 1.50 版。
Tie::File 已从 1.01 版升级到 1.02 版。
Tie::Scalar 已从 1.03 版升级到 1.04 版。
Time::HiRes 已从 1.9726 版升级到 1.9732 版。
Time::Piece 已从 1.29 版升级到 1.31 版。
Unicode::Collate 已从 1.12 版升级到 1.14 版。
Unicode::Normalize 已从 1.18 版升级到 1.25 版。
Unicode::UCD 已从 0.61 版升级到 0.64 版。
UNIVERSAL 已从 1.12 版升级到 1.13 版。
utf8 已从 1.17 版升级到 1.19 版。
version 已从 0.9909 版升级到 0.9916 版。
warnings 已从 1.32 版升级到 1.36 版。
Win32 已从 0.51 版升级到 0.52 版。
Win32API::File 已从 0.1202 版升级到 0.1203 版。
XS::Typemap 已从 0.13 版升级到 0.14 版。
XSLoader 已从 0.20 版升级到 0.21 版。
已记录使用未记录全局变量的过程,即,首先应发送电子邮件至 [email protected] 以获得记录和使用未记录函数或全局变量的许可。
已对 perlcall 进行了许多清理,包括
在适用情况下使用 EXTEND(SP, n)
和 PUSHs()
代替 XPUSHs()
,并更新散文以匹配
将 POPu、POPul 和 POPpbytex 添加到“POP 宏的完整列表”中,并澄清一些现有条目的文档,以及有关副作用的说明
添加 POPu 和 POPul 的 API 文档
更有效地使用 ERRSV
SV 的线程安全存储方法。
已修订 hex
的文档以澄清有效的输入。
更好地解释 waitpid
中负 PID 的含义。 [GH #15108]
常规清理:现在更一致(在 POD 使用、语法、代码示例中),代码示例中的最佳实践(使用 my
、删除裸字文件句柄、在调用子例程时不再使用 &
,...),等等。
已添加一个新章节,perlguts 中的“动态作用域和上下文堆栈”,解释了 perl 上下文堆栈的工作原理。
给出了关于在多线程应用程序中使用区域设置的更强警告。区域设置不是线程安全的,如果您在其中使用它们,可能会得到错误的结果甚至段错误。
我们现在建议联系 module-authors 列表或 PAUSE 以寻求有关模块命名的指导。
qx//
的文档现在描述了 $?
如何受到影响。
已将此注释添加到 perlpolicy
While civility is required, kindness is encouraged; if you have any
doubt about whether you are being civil, simply ask yourself, "Am I
being kind?" and aspire to that.
修复了一些示例以使其 strict 清理。
澄清在日语和泰语等语言中,需要词典查找来确定单词边界。
更新以注意匿名子例程可以有签名。
修复了一个损坏的示例,其中在 do/while 示例中的条件中使用了 =
而不是 ==
。
已澄清 FIRSTKEY
和 NEXTKEY
的用法。
不鼓励使用“In”作为表示 Unicode 块属性的前缀。
$@
的文档已重新表述,以澄清它不仅仅适用于 eval
中的语法错误。 [GH #14572]
现在记录了 $!{E...}
的特定真值,并指出它可能会更改且无法保证。
现在不鼓励使用 $OLD_PERL_VERSION
。
已更正 PROTOTYPES
的文档;它们默认情况下是禁用的,而不是启用的。
以下内容已添加到诊断输出中,包括警告和致命错误消息。有关诊断消息的完整列表,请参阅 perldiag。
不再弃用将 glob 的 IO
部分作为 FILEHANDLE
而不是 IO
访问。不鼓励这样做,以促进统一(例如,可以更容易地 grep),但不会将其移除。 [GH #15105]
诊断 Hexadecimal float: internal error
已更改为 Hexadecimal float: internal error (%s)
,以包含更多信息。
此错误现在会报告您尝试用作左值的非左值子例程的名称。
在尝试增加堆栈大小时内存不足时,perl 以前会使用晦涩的消息 panic: av_extend_guts() negative count (-9223372036854775681)
终止。此问题已修复,显示更简洁的消息:堆栈扩展期间内存不足
Configure
现在会像始终传递 -O
选项一样,允许命令行选项覆盖已保存的配置。当命令行选项在没有明显原因的情况下被忽略时,这应该可以消除混乱。-O
现在允许使用,但会被忽略。
现在支持 Bison 3.0。
Configure 不再默认探测 libnm。最初这是“新数学”库,但 GNOME NetworkManager 已重新使用了该名称。 [GH #15115]
添加了 Configure 探测 newlocale
、freelocale
和 uselocale
。
PPPort.so/PPPort.dll
不再被安装,因为它们不被 PPPort.pm
使用,只被其测试文件使用。
现在可以通过设置宏 PERL_BUILD_DATE
来指定在 perl -V
输出中显示哪个编译日期。
自 Perl 5.17.10 起,在编译解释器时,将 NO_HASH_SEED
定义与默认哈希算法 PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
结合使用会导致致命错误。此问题已得到修复。
Configure 应该能更好地处理路径中的空格。
不再生成 EBCDIC POSIX-BC 表。我们认为目前没有人同时使用 Perl 和 POSIX-BC,并且通过不生成这些表,它可以节省开发时间,并减小生成的 tar 包大小。
适用于 Win32 的 GNU Make makefile 现在支持并行构建。[perl #126632]
现在可以使用 GNU Make 在 Win32 上使用 MSVC++ 构建 perl。[perl #126632]
Win32 miniperl 现在有一个真正的 getcwd
,它提高了构建性能,从而使 Win32 miniperl 中的 getcwd()
快了 605 倍。
在计算 alignbytes
配置变量时,Configure 现在会考虑 -Dusequadmath
。以前计算错误的 alignbytes
可能会导致调试构建出现对齐错误。[perl #127894]
已添加一个新测试 (t/op/aassign.t) 来测试列表赋值运算符 OP_AASSIGN
。
已将并行构建添加到 dmake makefile.mk
makefile。支持所有 Win32 编译器。
AmigaOS 端口已重新集成到主树中,基于 Perl 5.22.1。
测试对异常的 cygdrive 前缀更加健壮。 [GH #15076]
UTF-EBCDIC 类似于 UTF-8,但适用于 EBCDIC 平台。现在已对其进行了扩展,以便它可以在具有 64 位字的平台上表示高达 2 ** 64 - 1 的代码点。这使其与 UTF-8 保持一致。此增强需要对 2 ** 30 到 2 ** 31 -1 范围内的代码点的表示进行不兼容的更改(后者是以前可表示的最大代码点)。这意味着使用以前版本的 perl 写出的包含其中一个代码点的文件无法在不进行转换的情况下被包含此更改的 perl 读入。我们不相信存在此类文件,但如果您确实有此类文件,请向 [email protected] 提交工单,我们将为您编写一个转换脚本。
cmp()
和 sort()
直到现在,比较两个都编码为 UTF-8(或更确切地说,UTF-EBCDIC)的字符串时,工作方式不正确。由于 sort()
使用 cmp()
,因此这也修复了该问题。
\N{}
和 use utf8
范围修复了 EBCDIC tr///
和 y///
Perl v5.22 引入了可移植范围的概念,用于正则表达式模式。无论在哪个平台上运行,可移植范围都匹配相同的字符集。此概念现在已扩展到 tr///
。请参阅 tr///
。
在 use utf8
下,这些操作也存在一些问题,现在已修复
如果可用,请使用 FreeBSD 中的 fdclose()
函数。 [GH #15082]
在某些情况下,IRIX stdio fgetc()
和 fread()
将 errno 设置为 ENOENT
,这与 IRIX 或 POSIX 文档都没有意义。现在在这种情况下会清除 Errno。 [GH #14557]
已修复乘以无穷大时出现的问题。 [GH #14993]
到目前为止,perl 的 OS X 版本指定了 10.3(Panther,2003)的链接目标,但未指定编译器目标。从现在开始,在 OS X 10.6 或更高版本(Snow Leopard,2008)上构建的 perl 默认捕获当前 OS X 版本,并在编译器和链接器标志中将其指定为显式构建目标,从而保留二进制兼容性,以便以后构建的扩展不受 OS X、SDK 或编译器和链接器版本更改的影响。要覆盖在构建中使用的并保留在标志中的默认值,请在配置和构建 perl 之前指定 export MACOSX_DEPLOYMENT_TARGET=10.N
,其中 10.N 是您希望定位的 OS X 版本。在 OS X 10.5 或更早版本中,当这些系统为当前系统时,行为不会发生变化;链接目标仍然是 OS X 10.3,并且没有显式的编译器目标。
在 OS X 上从终端构建或测试时,启用 -DDEBUGGING 和线程的构建将失败,并出现“panic: free from wrong pool”错误。这是由于 perl 对环境的内部管理与使用 libc setenv()
函数更新环境的 atfork 处理程序冲突造成的。
Perl 现在使用 setenv()
/unsetenv()
在 OS X 上更新环境。 [GH #14955]
所有 Solaris 变体现在都构建一个共享的 libperl
Solaris 和 OpenIndiana 等变体现在总是使用共享 Perl 库构建(Configure -Duseshrplib)。OpenIndiana 构建需要这样做,但这也是 Oracle/Sun Perl 构建多年来的设置。
解决当原型被列为 PERL_STATIC_INLINE
时 Tru64 拒绝,但测试使用 -DPERL_NO_INLINE_FUNCTIONS
构建的问题。
在 VMS 上,math.h
中的数学函数原型现在可以在 C++ 下可见。现在使用 C++ 构建 POSIX 扩展将不再崩溃。
VMS 自 v7.0(1996 年发布)以来一直有 setenv
/unsetenv
,Perl_vmssetenv
现在始终使用 setenv
/unsetenv
。
Perl 现在通过扫描指定进程组中的进程来实现自己的 killpg
,这可能与 Unix 进程组的含义不完全相同,但允许我们向父(或主)进程及其所有子进程发送信号。在 perl 级别,这意味着我们现在可以发送负 pid,如下所示
kill SIGKILL, -$pid;
向与 $pid
相同组中的所有进程发出信号。
对于基于 CRTL environ 数组的那些 %ENV
元素,我们在设置它们时始终保留大小写,但在首次将键大写后才进行查找,这导致小写或混合大小写的条目丢失。通过使从 environ 数组派生的 %ENV
元素在查找时区分大小写以及在存储时保留大小写,已更正此问题。
环境查找 PERL5LIB
和 PERLLIB
以前只考虑逻辑名称,但现在考虑 %ENV
的所有来源,如 PERL_ENV_TABLES
所确定,并在 "perlvms 中的 %ENV" 中记录。
现在支持的最低 VMS 版本为 2003 年发布的 v7.3-2。此更改的一个副作用是,VAX 不再受支持,因为 OpenVMS VAX 的终端版本是 2001 年的 v7.3。
已向 Makefile 中添加了一个新的构建选项 USE_NO_REGISTRY
。此选项默认关闭,这意味着默认情况下执行 Windows 注册表查找。此选项阻止 Perl 在注册表中查找任何内容。有关在注册表中查找哪些值,请参阅 perlwin32。在 C 中,此选项的名称为 WIN32_NO_REGISTRY
。
Perl 使用 HKEY_CURRENT_USER\Software\Perl
和 HKEY_LOCAL_MACHINE\Software\Perl
查找特定值(包括以 PERL
开头的 %ENV
变量)的行为已更改。以前,即使不存在,也会在 perl 进程的整个生命周期内始终检查 2 个键的条目。出于性能原因,现在,如果根键(即 HKEY_CURRENT_USER\Software\Perl
或 HKEY_LOCAL_MACHINE\Software\Perl
)在进程启动时不存在,则不会再次检查 %ENV
覆盖条目,直到 perl 进程生命周期的剩余时间。这更接近于 Unix 行为,即环境在启动时被复制或继承,并且在父进程或其他进程中更改变量或编辑 .bashrc 不会更改其他现有正在运行进程中的环境变量。
从 Perl 代码或从 Perl 的 C 代码内部执行的每个 -X
或 stat
调用都删除了一个 glob 提取。被查找的 glob 是一个特殊变量 ${^WIN32_SLOPPY_STAT}
。这使得 -X
和 stat
稍快一些。
在 miniperl 进程启动期间,在构建过程中,与进程启动 .pl 和 buildcustomize.pl 文件相关的 4 到 8 个 IO 调用已从打开和执行第一个 1 或 2 个 .pl 文件的代码中删除。
使用 Microsoft Visual C++ 2003 及更早版本进行构建不再会产生“内部编译器错误”消息。[perl #126045]
Visual C++ 2013 构建现在将在 XP 及更高版本上执行。以前它们只能在 Vista 及更高版本上执行。
你现在可以使用 GNU Make 和 GCC 构建 perl。[perl #123440]
truncate($filename, $size)
现在可用于大小超过 4GB 的文件。[perl #125347]
已将并行构建添加到 dmake makefile.mk
makefile。支持所有 Win32 编译器。
使用 64 位 GCC 但使用 32 位 gmake 构建 64 位 perl 将导致生成的 perl 的 $Config{archname}
无效。[perl #127584]
Winsock 函数设置的错误现在直接放入 $^E
,并且相关 WSAE*
错误代码现在从 Errno 和 POSIX 模块导出,以便对此进行测试。
自 Perl 5.20.0 以来,将错误(转换为 POSIX 样式 E*
错误代码)放入 $!
的先前行为存在缺陷,因为同名的 Winsock 和 POSIX 错误常量不等效,自 Perl 5.8.0 以来,不幸地以某种方式建立了它们之间的关系。
新行为为检查可移植软件中的 Winsock 错误提供了更健壮的解决方案,而不会意外匹配针对其他操作系统且对 Winsock 可能有不同含义的 POSIX 测试。
出于向后兼容性的考虑,当前保留了所有缺陷的旧行为,但鼓励用户更改任何针对 Winsock 错误测试 $!
与 E*
常量的代码,改为针对 WSAE*
常量测试 $^E
。在适当的弃用期之后,可能会删除旧行为,在 Winsock 函数调用后保持 $!
不变,以避免对检查哪个错误变量造成任何可能的混淆。
ppc64el(Debian 为小端 PowerPC 命名)的浮点数格式现在可以正确检测。
perl 上下文堆栈系统及其内部 API 已被大幅修改。请注意,尚未对任何外部 API 进行重大更改,但依赖于此类内部详细信息的 XS 代码可能需要修复。主要更改是
PUSHBLOCK()
、POPSUB()
等宏已替换为静态内联函数,如 cx_pushblock()
、cx_popsub()
等。这些函数使用函数参数,而不是隐式依赖于局部变量,如 gimme
和 newsp
。此外,其功能也已更改:特别是,cx_popblock()
不再递减 cxstack_ix
。涉及 cx_popblock()
、cx_popsub()
等的 pp_leave*
函数中步骤的顺序已更改。有关如何使用它们的详细信息,请参阅新的文档,perlguts 中的“动态作用域和上下文堆栈”。
已添加各种宏,现在始终带有 CX_ 前缀
CX_CUR(), CX_LEAVE_SCOPE(), CX_POP()
或已重命名
CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST()
cx_pushblock()
现在保存 PL_savestack_ix
和 PL_tmps_floor
,因此 pp_enter*
和 pp_leave*
不再执行此操作
ENTER; SAVETMPS; ....; LEAVE
cx_popblock()
现在还恢复 PL_curpm
。
在 dounwind()
中,对于每种上下文类型,现在在弹出每个上下文之前处理当前保存堆栈帧;以前仅对类似子例程的上下文帧执行此操作。此操作已从 cx_popsub()
中移除,并放入其自己的宏 CX_LEAVE_SCOPE(cx)
中,该宏必须在 cx_popsub()
等之前调用。
dounwind()
现在还对最后一个弹出的帧执行 cx_popblock()
(以前它仅对每个帧执行 cx_popsub()
等操作)。
现在在作用域退出时释放临时堆栈;以前,在块的最后一条语句期间创建的临时堆栈不会释放,直到块之后的下一个 nextstate
(除了一个现有的 hack,它对标量上下文中递归子例程执行此操作);而在类似 f(g())
的内容中,以前不会释放 g()
中最后一条语句创建的临时堆栈,直到从 f()
返回之后的语句。
现在,在作用域入口处保存在保存堆栈上的大多数值都保存在上下文结构中的合适新字段中,并由 cx_pushfoo()
和 cx_popfoo()
直接保存和恢复,这要快得多。
已添加、移除或修改各种上下文结构字段。
已大幅整理 cx_pushsub()
和 cx_popsub()
中 @_
的处理,包括从上下文结构中移除 argarray
字段,并将一些常见的(但很少使用)代码提取到单独的函数 clear_defarray()
中。此外,已将 cx_popsub()
的有用子集(已在 pp_goto
等位置展开)收集到新函数 cx_popsub_args()
和 cx_popsub_common()
中。
pp_leavesub
和 pp_leavesublv
现在使用与其他 pp_leave*
相同的函数来处理返回参数。
已添加 CXp_FOR_PAD
和 CXp_FOR_GV
标志,并将 CXt_LOOP_FOR
拆分为 CXt_LOOP_LIST
、CXt_LOOP_ARY
。
dMULTICALL
以前声明的一些变量(但未记录)已被移除。
晦涩的 PL_timesbuf
变量(实际上是 Perl 1 的残余)已被移除。在 Perl 5.20 中将它记录为已弃用,并声明它将在 5.21.x 系列的早期版本中移除;现在终于实现了。 [GH #13632]
Perl_newATTRSUB_x()
中的一个不合理的断言已被移除。如果已看到具有原型的存根子例程定义,那么任何带有属性的相同子例程的后续存根(或定义)都会由于空指针而导致断言失败。 [GH #15081]
ExtUtils::ParseXS
中的 ::
已被 __
替换,就像对参数/返回值所做的那样。这更加一致,并简化了将 C++ 类包装到嵌套 Perl 命名空间中的 XS 代码的编写(它只需要一个 Foo__Bar
的 typedef,而不是两个,一个用于 Foo_Bar
,另一个用于 Foo::Bar
)。
to_utf8_case()
函数现已弃用。请改用 toUPPER_utf8
、toTITLE_utf8
、toLOWER_utf8
和 toFOLD_utf8
。(请参阅 http://nntp.perl.org/group/perl.perl5.porters/233287。)
Perl 核心代码和线程扩展已得到注释,以便如果将 Perl 配置为使用线程,那么在编译时 clang(3.6 或更高版本)将针对可疑的互斥锁使用发出警告。有关更多信息,请参阅 http://clang.llvm.org/docs/ThreadSafetyAnalysis.html。
signbit()
仿真已得到增强。这将有助于更旧和/或更奇特的平台或配置。
核心中的大多数 EBCDIC 特定代码已与非 EBCDIC 代码统一,以避免重复并使维护更容易。
$^X
的 MSWin32 代码已从 win32 目录移至 caretx.c,其他操作系统在此处设置该变量。
sv_ref()
现在是 API 的一部分。
perlapi 中的“sv_backoff” 的返回类型已从 int
更改为 void
。自 Perl 5.000 稳定版以来,它以前始终返回 0
,但这是未记录的。尽管 sv_backoff
被标记为公共 API,但 XS 代码预计不会受到影响,因为正确的 API 调用将通过公共 API sv_setsv(sv, &PL_sv_undef)
,或准公共 SvOOK_off
,或非公共 SvOK_off
调用,并且 sv_backoff
的返回值以前是一个无意义的常量,可以重写为 (sv_backoff(sv),0)
。
EXTEND
和 MEXTEND
宏已得到改进,以避免与整数截断和换行相关的各种问题。特别是,已删除宏中以前使用的某些强制转换。这意味着例如传递一个无符号的 nitems
参数现在可能会引发编译器警告(它始终被记录为需要一个有符号值;以前是 int,最近是 SSize_t)。
PL_sawalias
和 GPf_ALIASED_SV
已被删除。
GvASSIGN_GENERATION
和 GvASSIGN_GENERATION_set
已被删除。
现在可以正确指定用户定义的属性,例如
qr/\p{mypkg1::IsMyProperty}/i
使用不区分大小写的 /i
匹配、显式包名称,并且在模式编译时未定义 IsMyProperty。
Perl 的 memcpy()
、memmove()
、memset()
和 memcmp()
回退现在与原版更兼容。[perl #127619]
修复了使用 -DPERL_NO_COW 的 s///r
) 尝试修改源 SV 的问题,导致程序终止。[perl #127635]
修复了仅限 EBCDIC 平台的情况,在这种情况下,模式可能无法匹配。当目标匹配字符串为 UTF-8 时,在匹配 C1 控制字符集中的字符时会发生这种情况。
缩小 strict.pm 和 warnings.pm 中的文件名检查范围。以前,它假设如果文件名(不带 .pmc? 扩展名)与包名称不同,则是一个拼写错误的 use 语句(即 use Strict
而不是 use strict
)。我们现在检查是否真的发生了大小写错误,而不是其他问题。
在解析正则表达式时将断言转换为更友好的失败。[perl #127599]
在尝试编译带有未终止字符类的模式时,如果存在尾随反斜杠,则正确引发错误。[perl #126141]。
caller()
不再将大于 2**31-1 但小于 2**32 的行号作为负数返回。[perl #126991]
当语法警告已启用时,unless ( assignment )
现在会正确发出警告。[perl #127122]
将 ISA
全局变量设置为数组引用现在会正确地将 isaelem
魔术添加到任何现有元素。以前修改此类元素不会更新 ISA 缓存,因此方法调用将调用错误的函数。自 5.23.7 中添加的新代码会尝试从元素中释放 isaelem
魔术,因此如果 ISA
全局变量被销毁,Perl 也会崩溃。[perl #127351]
如果在解析另一个运算符时找到 here-doc,解析器已经读取了文件结尾,并且 here-doc 尚未终止,perl 可能会产生断言或段错误。现在它会可靠地抱怨未终止的 here-doc。[perl #125540]
untie()
有时会返回 UNTIE()
处理程序返回的最后一个值以及它的正常值,从而搞乱堆栈。[perl #126621]
当 castflags & 2
为 true 时,修复了一个运算符优先级问题。[perl #127474]
DESTROY 方法的缓存可能会导致非指针或非 STASH 存储在 stash 的 SvSTASH()
插槽中,从而破坏 B STASH()
方法。DESTROY 方法现在缓存在 stash 的 MRO 元数据中。[perl #126410]
在搜索 DESTROY 方法时,现在会调用 AUTOLOAD 方法,并且也会正确设置 $AUTOLOAD
。[perl #124387] [perl #127494]
在处理没有文件名的 #line
指令时,避免解析超出缓冲区的结尾。[perl #127334]
当正则表达式模式看起来像应该包含 POSIX 类时,例如 qr/[[:alpha:]]/
,但其规范中存在一些细微缺陷,导致它被视为常规方括号字符类时,Perl 现在会发出警告。一个例子是像这样缺少第二个冒号:qr/[[:alpha]]/
。这会编译为匹配两个字符的序列。第二个是 "]"
,第一个是以下任何一个:"["
、":"
、"a"
、"h"
、"l"
或 "p"
。这不太可能是预期含义,现在会发出警告。除非规范非常接近 14 个合法 POSIX 类之一,否则不会发出警告。(请参阅 "POSIX Character Classes" in perlrecharclass。)[perl #8904]
涉及反向方括号字符类中补集 POSIX 类且可选匹配其他内容的某些正则表达式模式会不当失败匹配。一个可能失败的示例是 qr/_?[^\Wbar]\x{100}/
。此问题已得到修复。[perl #127537]
Perl 5.22 添加了对 C99 十六进制浮点数表示法的支持,但有时会错误地解析十六进制浮点数。此问题已修复。[perl #127183]
已修复允许哈希键中未声明的裸字在严格条件下工作的回归。 [GH #15099]
当找不到 import()
或 unimport()
方法时,在内部使用的占位符 &PL_sv_yes
的调用现在可以正确处理标量上下文。 [GH #14902]
当我们看到一个数组(我们期望看到一个运算符)时,报告更多上下文并避免断言失败。 [GH #14472]
修改先前为包 @ISA
的数组不再导致断言失败或崩溃。 [GH #14492]
在普通和 DEBUGGING perl 构建之间保留二进制兼容性。 [GH #15122]
避免在 darwin 上设置 $ENV{foo}
时泄漏内存。 [GH #14955]
/...\G/
不再在 utf8 字符串上崩溃。当 \G
是从正则表达式开头开始的固定字符数时,perl 需要从当前 pos()
位置倒数那么多字符,并从那里开始匹配。但是,它计算的是字节而不是字符,这可能导致 utf8 字符串出现恐慌。
在某些情况下,返回整数的运算符会将负整数作为较大的正整数返回。 [GH #15049]
pipe()
运算符会在 DEBUGGING 构建中断言,而不是生成正确的错误消息。断言的条件被检测到并正确报告,而没有断言,因此断言被删除。 [GH #15015]
在某些情况下,解析 here-doc 失败时会尝试使用已释放的内存。这是由于指针未正确恢复造成的。 [GH #15009]
@x = sort { *a = 0; $a <=> $b } 0 .. 1
不再在恢复其 SV 插槽之前释放 *a 的 GP。 [GH #14595]
修复了新十六进制浮点数 printf 格式 %a
的多个问题:[GH #15032]、[GH #15033]、[GH #15074]
在 leave_scope()
中调用 mg_set()
不再泄漏。
修复了 Perl v5.20 中的一个回归,其中正则表达式编译的调试输出是错误的。(模式已正确编译,但显示的内容是错误的。)
\b{sb}
的工作效果好多了。在 Perl v5.22.0 中,这个新结构似乎没有给出预期的结果,但通过了 Unicode 提供的广泛套件中的所有测试。事实证明,这是因为这些是短输入字符串,而失败与较长的输入有关。
在 perlrecharclass 中的“扩展方括号字符类” 中的某些语法错误导致出现恐慌,而不是正确的错误消息。此问题现已修复。[perl #126481]
Perl 5.20 在正则表达式中量词无用时添加了一条消息,但随后导致解析器跳过它;这导致多余的量词被静默忽略,而不是抛出错误。此问题现已修复。[perl #126253]
在 win32/makefile.mk 中最后构建非 XS 模块的切换(作为启用并行构建的更改的一部分而引入的设计)导致 POSIX 的构建由于版本模块的问题而中断。此问题现已修复。
改进了十六进制浮点常量的解析。
修复了 pack
中的一个问题,其中 pack "H"
(和 pack "h"
)在给定非 utf8 源和 utf8 目标时可能会读取源的后面部分。[perl #126325]
修复了 perl 因分段错误或 C 级断言而中止的几个案例。[perl #126615]、[perl #126602]、[perl #126193]。
在正则表达式模式中,有些地方不允许注释((?#...)
),但应该允许。此问题现已修复。 [GH #12755]
修复了 Perl 5.20 中的一些回归,其中正则表达式模式中 (?[...])
结构中的一些语法错误可能会导致段错误,而不是正确的错误消息。 [GH #14933] [GH #14996]
修复了 (?[...])
结构的另一个问题,其中诸如 \c]
之类的内容可能会导致恐慌。 [GH #14934]
尝试将 perl 堆栈扩展到大约 2G 或 4G 条目的一些问题已得到修复。这尤其是在构建为使用 64 位整数的 32 位 perl 上存在的问题,并且使用列表重复运算符很容易注意到,例如。
@a = (1) x $big_number
以前,perl 可能会崩溃,具体取决于 $big_number
的确切值;现在它通常会引发异常。 [GH #14880]
在正则条件表达式 (?(condition)yes-pattern|no-pattern)
中,如果条件是 (?!)
,则 perl 会直接匹配失败,而不是匹配 no-pattern。此问题已得到修复。 [GH #14947]
特殊回溯控制动词 (*VERB:ARG)
现在都允许一个可选参数,并相应地设置 REGERROR
/REGMARK
。 [GH #14937]
已修复几个错误,包括边界检查构造(在 Perl 5.22 中引入)\b{gcb}
、\b{sb}
、\b{wb}
、\B{gcb}
、\B{sb}
和 \B{wb}
中的分段错误。所有 \B{}
现在都匹配一个空字符串;没有 \b{}
匹配。 [GH #14976]
为写入复制一个已关闭的文件句柄不再会创建形式为 GLOB(0xXXXXXXXX) 的文件名。 [perl #125115]
现在在回绕堆栈时忽略警告致命性。当现在致命的错误也导致堆栈回绕时,这可以防止无限递归。 [perl #123398]
在 perl v5.22.0 中,解析 -C 选项的数字参数时的逻辑发生了变化,成功解析的数字不会保存为选项值,如果它解析到参数的末尾。 [perl #125381]
PadlistNAMES 宏再次成为一个左值。
子线程的零 -DPERL_TRACE_OPS 内存。
perl_clone_using()
缺少 PL_op_exec_cnt[] 的零初始化。这导致了 -DPERL_TRACE_OPS 线程构建中的子线程在析构时会产生非常大的操作计数。这些计数将 %x 打印为 "ABABABAB",显然是一个内存中毒值。
XS 类型映射中的一个泄漏导致每次将 FILE *
或 PerlIO *
OUTPUT:
ed 或导入到 Perl 时都会泄漏一个标量,自 perl 5.000 以来一直如此。这些特定的类型映射条目被认为极少被 XS 模块使用。 [perl #124181]
如果参数为负数,alarm()
和 sleep()
现在会发出警告并返回 undef。以前,它们会将负值传递给底层 C 函数,而该函数可能已设置了一个具有意外值的计时器。
Perl 现在可以使用任何 Unicode 版本进行编译。这曾经(大部分)可行,但在 v5.18 至 v5.20 中丢失了。Name_Alias
属性在 Unicode 5.0 之前不存在。 Unicode::UCD 错误地表示存在。此问题已得到解决。
正则表达式中非常大的代码点(超出 Unicode)在某些情况下转换为 UTF-8 时不再导致缓冲区溢出。 [GH #14858]
列表上下文中范围运算符 (...) 的整数溢出检查现在可以正确处理范围大小大于地址空间的情况。这可能会在 32 位系统上使用 -Duse64bitint 发生。 [GH #14843]
%::=(); J->${\"::"}
崩溃问题已得到解决。 [GH #14790]
qr/(?[ () ])/
不再段错误,而是给出语法错误消息。 [perl #125805]
正则表达式占有量词 v5.20 回归问题现已解决。qr/
PAT{
min,max}+
/
应该与 qr/(?>
PAT{
min,max})/
的行为相同。自 v5.20 起,如果 min 和 max 相等,则此操作无效。 [perl #125825]
BEGIN <>
不再段错误,并正确生成错误消息。 [perl #125341]
在 tr///
中,非法向后范围(如 tr/\x{101}-\x{100}//
)并不总是被检测到,从而导致不正确的结果。此问题现已解决。
Perl 5.24.0 代表了自 Perl 5.24.0 以来大约 11 个月的开发时间,包含来自 75 位作者的 1,800 个文件中的大约 360,000 行更改。
不包括自动生成的文件、文档和发布工具,大约有 250,000 行更改到 1,200 个 .pm、.t、.c 和 .h 文件。
由于活跃的用户和开发人员社区,Perl 在其第三个十年中继续蓬勃发展。已知以下人员为 Perl 5.24.0 的改进做出了贡献
Aaron Crane、Aaron Priven、Abigail、Achim Gratz、Alexander D'Archangel、Alex Vandiver、Andreas König、Andy Broad、Andy Dougherty、Aristotle Pagaltzis、Chase Whitener、Chas. Owens、Chris 'BinGOs' Williams、Craig A. Berry、Dagfinn Ilmari Mannsåker、Dan Collins、Daniel Dragan、David Golden、David Mitchell、Doug Bell、Dr.Ruud、Ed Avis、Ed J、Father Chrysostomos、Herbert Breunung、H.Merijn Brand、Hugo van der Sanden、Ivan Pozdeev、James E Keenan、Jan Dubois、Jarkko Hietaniemi、Jerry D. Hedden、Jim Cromie、John Peacock、John SJ Anderson、Karen Etheridge、Karl Williamson、kmx、Leon Timmermans、Ludovic E. R. Tolhurst-Cleaver、Lukas Mai、Martijn Lievaart、Matthew Horsfall、Mattia Barbon、Max Maischein、Mohammed El-Afifi、Nicholas Clark、Nicolas R.、Niko Tyni、Peter John Acklam、Peter Martini、Peter Rabbitson、Pip Cet、Rafael Garcia-Suarez、Reini Urban、Ricardo Signes、Sawyer X、Shlomi Fish、Sisyphus、Stanislaw Pusep、Steffen Müller、Stevan Little、Steve Hay、Sullivan Beck、Thomas Sibley、Todd Rinaldo、Tom Hukins、Tony Cook、Unicode Consortium、Victor Adam、Vincent Pit、Vladimir Timofeev、Yves Orton、Zachary Storer、Zefram。
上面的列表几乎肯定是不完整的,因为它是从版本控制历史记录中自动生成的。特别是,它不包括向 Perl 错误跟踪器报告问题的(非常感谢的)贡献者的姓名。
此版本中包含的许多更改源自 Perl 核心包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。
有关 Perl 所有历史贡献者的更完整列表,请参阅 Perl 源代码发行版中的 AUTHORS 文件。
如果您发现您认为是错误的内容,您可以查看最近发布到 comp.lang.perl.misc 新闻组和 https://rt.perl.org/ 上的 perl 错误数据库中的文章。Perl 主页 https://www.perl5.cn/ 上也可能有信息。
如果您认为您有一个未报告的错误,请运行发行版中包含的 perlbug 程序。务必将您的错误精简为一个微小但足够的测试用例。您的错误报告以及 perl -V
的输出将被发送到 [email protected],供 Perl 移植团队分析。
如果您报告的错误具有安全影响,不适合发送到公开存档的邮件列表,请参阅 perlsec 中的“安全漏洞联系信息”,了解如何报告该问题的详细信息。
Changes 文件,了解如何查看已更改内容的详尽详细信息。
INSTALL 文件,了解如何构建 Perl。
README 文件,了解一般内容。
Artistic 和 Copying 文件,了解版权信息。