perl5005delta - perl5.005 的新增内容
本文档描述了 5.004 版本与本版本之间的差异。
Perl 现在在两个轨道上开发:一个维护轨道,对已发布的生产版本进行小的、安全的更新,重点是兼容性;另一个是开发轨道,追求更积极的演进。维护版本(应视为生产质量)的次版本号从 1
运行到 49
,而开发版本(应视为“alpha”质量)从 50
运行到 99
。
Perl 5.005 是新的双轨道开发方案的综合产物。
从 Perl 5.004_50 开始,对语言内部进行了许多深刻而广泛的更改。如果您有在 perl 5.003 或 5.004 下构建的动态加载扩展,您可以继续在 5.004 中使用它们,但您需要重新构建和重新安装这些扩展才能在 5.005 中使用它们。有关如何升级的详细说明,请参阅 INSTALL。
新的 Configure 默认值旨在允许从 5.004 平滑升级到 5.005,但您应该阅读 INSTALL 以详细了解更改,以便将其适应您的系统。
当没有启用任何实验性功能时,应该很少有用户可见的 Perl 源代码兼容性问题。
如果启用了线程,则会有一些注意事项。@_
和 $_
成为词法变量。这对于用户来说应该是透明的,但有一些边界条件,用户需要了解这些问题。例如,local(@_)
会导致“无法本地化词法变量 @_ ...”消息。这可能在将来的版本中启用。
引入了几个新的关键字。这些关键字通常预计对兼容性影响很小。请参阅 "新的 INIT
关键字"、"新的 lock
关键字" 和 "新的 qr//
运算符"。
某些裸词现在被保留。如果您使用 -w
开关请求了这些裸词,则使用它们会引发警告。请参阅 "our
现在是一个保留字"。
内部进行了大量更改以支持此版本中的新功能。
核心源代码现在需要 ANSI C 编译器
现在需要 ANSI C 编译器才能构建 Perl。请参阅 INSTALL。
所有 Perl 全局变量现在必须使用显式前缀引用
所有对扩展可见的 Perl 全局变量现在都有 PL_
前缀。新的扩展应该 不
使用未限定的名称引用 Perl 全局变量。为了保持理智,我们为广泛使用的全局变量提供了有限的向后兼容性,例如 sv_undef
和 na
(现在应该写成 PL_sv_undef
、PL_na
等)。
如果您发现您的 XS 扩展不再编译,因为 Perl 全局变量不可见,请尝试在全局变量前添加 PL_
前缀并重新构建。
强烈建议所有 Perl API 中不以 perl
开头的函数都使用 Perl_
前缀引用。没有 Perl_
前缀的裸函数名通过宏支持,但此支持可能会在将来的版本中停止。
请参阅 perlapi。
启用线程存在源代码兼容性问题
使用启用线程功能构建的 Perl 要求扩展使用新的 dTHR
宏来初始化句柄以访问每个线程数据。如果您看到一个关于变量 thr
未声明的编译器错误(在构建具有 XS 代码的模块时),您需要在引发错误的代码块的开头添加 dTHR;
。
API 函数 perl_get_sv("@",GV_ADD)
应该用于代替直接访问 Perl 全局变量,例如 GvSV(errgv)
。API 调用与现有 Perl 向后兼容,并在启用线程时提供源代码兼容性。
有关更多信息,请参阅 "C 源代码兼容性"。
此版本与旧版本 不 兼容。所有扩展都需要重新编译。此外,使用启用线程功能构建的二进制文件与未启用线程功能构建的二进制文件不兼容。这对于用户来说应该是透明的,因为所有二进制不兼容的配置都有其自己的唯一架构名称,并且扩展二进制文件安装在唯一的位置。这允许在同一目录层次结构中共存多个配置。请参阅 INSTALL。
修复了一些污染泄漏和污染遗漏问题。这可能会导致以前在旧版本中有效的脚本“失败”。使用 -DINCOMPLETE_TAINTS 编译可以提供一个对污染行为更改最少的 perl。但请注意,生成的 perl 将存在已知的安全漏洞。
使用 -e
开关的单行命令不再创建临时文件。
在 5.004 中引入的许多新警告已变为可选。其中一些警告仍然存在,但 perl 的新功能使它们不再那么容易出现问题。请参阅 "新诊断"。
Perl 针对贡献者制定了新的社会契约。请参阅 Porting/Contract。
Perl 大部分文档中包含的许可证已更改。以前,大部分 Perl 文档都在隐含的 GNU 通用公共许可证或 Artistic 许可证(由用户选择)下。现在,大部分文档明确说明了其分发的条款。这些条款总体上比 GNU GPL 限制性更小。请参阅 perl 以及其中列出的各个 perl 手册页。
警告:线程被认为是实验性功能。实现细节可能会在未经通知的情况下更改。存在已知的限制和一些错误。这些错误预计将在未来的版本中修复。
请参阅 README.threads。
警告:编译器和相关工具被认为是实验性的。功能可能会在未经通知的情况下更改,并且存在已知的限制和错误。由于编译器完全独立于 perl,因此默认配置将构建并安装它。
编译器会对 perl 程序进行三种不同类型的转换。C 后端会生成 C 代码,该代码会捕获 perl 在执行开始之前的状态。它消除了常规 perl 解释器的编译时开销,但运行时性能保持相对相同。CC 后端会生成优化的 C 代码,等效于运行时的代码路径。CC 后端具有更大的优化潜力,但目前只实现了一些优化。字节码后端会生成解释器在执行之前的状态的平台无关字节码表示。因此,字节码后端也消除了大部分解释器的编译开销。
编译器附带了一些有价值的实用程序。
B::Lint
是一个实验性模块,用于检测和警告可疑代码,尤其是 -w
开关无法检测到的情况。
B::Deparse
可用于解析 Perl 代码,并了解 Perl 如何优化某些结构。
B::Xref
生成程序中所有变量、子例程和格式的定义和使用交叉引用报告。
B::Showlex
显示子例程或文件使用的词法变量。
perlcc
是一个简单的 Perl 编译器前端。
参见 ext/B/README
、B 和相应的编译器模块。
Perl 的正则表达式引擎已彻底改造,并支持许多新结构。已修复多个错误。
以下是逐项摘要
RE 引擎中的更改
Unneeded nodes removed;
Substrings merged together;
New types of nodes to process (SUBEXPR)* and similar expressions
quickly, used if the SUBEXPR has no side effects and matches
strings of the same length;
Better optimizations by lookup for constant substrings;
Better search for constants substrings anchored by $ ;
使用 RE 引擎的 Perl 代码中的更改
More optimizations to s/longer/short/;
study() was not working;
/blah/ may be optimized to an analogue of index() if $& $` $' not seen;
Unneeded copying of matched-against string removed;
Only matched part of the string is copying if $` $' were not seen;
请注意,此处仅列出了主要错误修复。有关其他修复,请参见 Changes。
Backtracking might not restore start of $3.
No feedback if max count for * or + on "complex" subexpression
was reached, similarly (but at compile time) for {3,34567}
Primitive restrictions on max count introduced to decrease a
possibility of a segfault;
(ZERO-LENGTH)* could segfault;
(ZERO-LENGTH)* was prohibited;
Long REs were not allowed;
/RE/g could skip matches at the same position after a
zero-length match;
支持以下新的语法元素
(?<=RE)
(?<!RE)
(?{ CODE })
(?i-x)
(?i:RE)
(?(COND)YES_RE|NO_RE)
(?>RE)
\z
参见 "新的 qr//
运算符"。
Better debugging output (possibly with colors),
even from non-debugging Perl;
RE engine code now looks like C, not like assembler;
Behaviour of RE modifiable by `use re' directive;
Improved documentation;
Test suite significantly extended;
Syntax [:^upper:] etc., reserved inside character classes;
(?i) localized inside enclosing group;
$( is not interpolated into RE any more;
/RE/g may match at the same position (with non-zero length)
after a zero-length match (bug fix).
有关详细信息,请参见 malloc.c
开头的横幅。
Perl 现在包含自己的高度优化的 qsort() 例程。新的 qsort() 能够抵抗不一致的比较函数,因此当给出编写不当的排序子例程时,Perl 的 sort()
将不再引发核心转储。(一些之前使用的 C 库 qsort()
曾经存在此问题。)在我们的测试中,新的 qsort()
在所有已知的 qsort()
实现中,平均需要最少的成对比较次数。
参见 perlfunc/sort
。
Perl 的信号处理容易出现随机崩溃,因为信号是异步到达的,而 Perl 运行时在任意时间点都不是可重入的。
但是,当启用线程时,可以使用一种可靠信号的实验性实现。参见 Thread::Signal
。另请参见 INSTALL,了解如何构建支持线程的 Perl。
内部机制现在仅在可预测的时间重新分配 Perl 堆栈。特别是,魔法调用永远不会触发堆栈的重新分配,因为运行时的所有可重入性都是使用“堆栈的堆栈”来处理的。这应该提高内部机制和 XSUB 中缓存的堆栈指针的可靠性。
Perl 以前会在脚本中遇到字面回车符时报错。现在,它们在程序文本中大多被视为空格。在字符串文字和 here 文档中,如果字面回车符与换行符配对出现,则会被忽略;如果它们单独出现,则会被解释为空格。这种行为意味着应避免在文件中使用字面回车符。通过在构建 perl 时定义预处理器符号 PERL_STRICT_CR
,可以获得更旧、更兼容(但更严格)的行为。当然,所有这些与字符串中如何处理 \r
等转义符无关。
请注意,这并不能神奇地让你能够将所有文本文件保留为 DOS 格式。宽松的处理仅适用于 perl 本身解析的文件。如果你的 C 编译器不允许文件中有回车符,你可能仍然无法构建需要 C 编译器的模块。
substr
、pos
和 vec
在左值上下文中使用时不再发生内存泄漏。许多影响嵌入多个解释器的应用程序的小型泄漏已被修复。
构建时选项 -DMULTIPLICITY
的许多细节已被重新设计。一些以前应该是每个解释器独有的全局变量现在已经变成了这样。小心使用,这允许解释器相互调用。参见 CPAN 上的 PerlInterp
扩展。
local()
在数组和哈希元素上的行为现在已明确定义参见 "perlsub 中的 Temporary Values via local()"。
%!
透明地绑定到 Errno 模块参见 perlref。
EXPR foreach EXPR
受支持参见 perlsyn。
参见 perlsub。
$^E
在 Win32 上有意义参见 perlvar。
foreach (1..1000000)
优化foreach (1..1000000)
现在被优化为计数循环。它不再尝试分配大小为 1000000 的列表。
Foo::
可用作隐式引用的包名当与包同名的子程序恰好被定义时,裸词会导致不直观的行为。因此,new Foo @args
使用对 Foo()
的调用的结果,而不是将 Foo
视为字面量。在间接对象槽中编写裸词的推荐方法是 new Foo:: @args
。请注意,当你这样做时,方法 new()
使用 Foo
而不是 Foo::
作为第一个参数。
exists $Foo::{Bar::}
测试包的存在在实际创建包之前,无法测试包的存在。现在,exists $Foo::{Bar::}
可用于测试 Foo::Bar
命名空间是否已创建。
参见 perllocale。
Perl5 一直在具有 64 位长整数的系统上支持 64 位。从 5.005 开始,添加了对具有 32 位长整数和 64 位 'long long' 整数的系统的实验性支持。如果你在 config.sh 中的 ccflags 中添加 -DUSE_LONG_LONG(或在 perl.h 中手动定义它),那么 perl 将使用 'long long' 支持构建。会有很多编译器警告,并且生成的 perl 可能无法在所有系统上运行。还有许多与第三方扩展和库相关的其他问题。此选项的存在是为了让人们能够解决这些问题。
die()
现在接受引用值,并且 $@
在异常陷阱中被设置为该值。这使得传播异常对象成为可能。这是一个未记录的实验性功能。
printf
格式转换都在内部处理INIT
关键字INIT
子例程类似于 BEGIN
和 END
,但它们在 Perl 运行时开始执行之前运行。例如,Perl 编译器利用 INIT
块来初始化和解析指向 XSUB 的指针。
lock
关键字lock
关键字是线程化 Perl 中的基本同步原语。当线程未启用时,它目前是无操作的。
为了最大程度地减少对源代码兼容性的影响,此关键字是“弱”的,即,任何具有相同名称的用户定义子例程都会覆盖它,除非已看到 use Thread
。
qr//
运算符qr//
运算符在语法上类似于其他类似引号的运算符,用于创建预编译的正则表达式。此编译形式现在可以显式地传递给变量,并在其他正则表达式中插值。参见 perlop。
our
现在是保留字使用 -w
开关时,调用名为 our
的子例程现在会引发警告。
参见 Tie::Array。
添加了一些缺少的钩子。还为 TIEARRAY 实现提供了一个新的基类。参见 Tie::Array。
substr() 现在可以在一次操作中同时返回和替换。可选的第 4 个参数是替换字符串。参见 "perlfunc 中的 substr"。
当 LENGTH 参数为负数时,splice() 的行为类似于 substr() 中 LENGTH 的行为。之前,负数 LENGTH 被视为 0。参见 "perlfunc 中的 splice"。
当你使用类似 substr($x, 5) = "hi"
的语句时,substr() 返回的标量是特殊的,因为对其的任何修改都会影响 $x。(这被称为“魔法左值”,因为“左值”是指赋值左侧的东西。)通常,这正是你期望发生的事情,但 Perl 在你使用 substr()、pos() 或 vec() 在可能被修改的上下文中时,也会使用相同的魔法,例如使用 \
获取引用,或者作为修改 @_
的子程序的参数。在之前的版本中,这种“魔法”只单向生效,但现在对魔法引用的标量(上面示例中的 $x)的更改也会影响魔法左值。例如,这段代码现在有不同的行为
$x = "hello";
sub printit {
$x = "g'bye";
print $_[0], "\n";
}
printit(substr($x, 0, 5));
在之前的版本中,这将打印“hello”,但现在它打印“g'bye”。
如果 $/
是对整数的引用,或包含整数的标量,<> 将读取记录而不是行。更多信息,参见 "perlvar 中的 $/"。
Configure 进行了许多增量改进。现在可以通过 Policy.sh 来持久化构建 perl 的站点范围策略。Configure 还会在 config.sh 中记录使用的命令行参数。
现在支持 BeOS。参见 README.beos。
现在在 DJGPP 工具下支持 DOS。参见 README.dos(在某些系统上安装为 perldos)。
现在支持 MiNT。参见 README.mint。
现在支持 MPE/iX。参见 README.mpeix。
现在支持 MVS(又名 OS390,又名 Open Edition)。参见 README.os390(在某些系统上安装为 perlos390)。
现在支持 Stratus VOS。请参见 README.vos。
Win32 支持已得到大幅增强。支持 Perl Object,它是 Perl 的 C++ 封装。GCC 和 EGCS 现在在 Win32 上受支持。请参见 README.win32,也称为 perlwin32。
VMS 配置系统已重写。请参见 README.vms(在某些系统上安装为 README_vms)。
大多数 Unix 平台的提示文件都进行了增量改进。
Perl 编译器和工具。请参见 B。
一个用于漂亮打印 Perl 数据的模块。请参见 Data::Dumper。
一个用于将 perl 值转储到屏幕的模块。请参见 Dumpvalue。
一个用于更方便地查找错误的模块。请参见 Errno。
一个用于文件操作的可移植 API。
查询和管理已安装的模块。
操作 .packlist 文件。
使函数/内置函数成功或失败。
Perl 中 System V IPC 操作的常量和其他支持基础结构。
一个用于编写测试套件的框架。
绑定数组的基类。
绑定句柄的基类。
Perl 线程创建、操作和支持。
设置子程序属性。
编译时类字段。
各种语义用于控制正则表达式的行为。
您现在可以运行测试 x 秒,而不是猜测要运行的测试数量。
保持更好的时间。
Carp 有一个新函数 cluck()。cluck() 警告,就像 carp() 一样,但也会在错误消息中添加堆栈回溯,就像 confess() 一样。
CGI 已更新至 2.42 版本。
添加了更多 Fcntl 常量:F_SETLK64、F_SETLKW64、O_LARGEFILE 用于访问大型(超过 4G)文件(尽管 64 位支持尚不可用,因此无需过度兴奋),Free/Net/OpenBSD 锁定行为标志 F_FLOCK、F_POSIX、Linux F_SHLCK 和 O_ACCMODE:O_RDONLY、O_WRONLY 和 O_RDWR 的掩码。
访问器方法 Re、Im、arg、abs、rho、theta、方法现在也可以用作修改器($z->Re(3))。
添加了一些径向三角学(圆柱形和球形),例如大圆距离。
POSIX 现在有自己的平台特定提示文件。
DB_File 支持 Berkeley DB 的 2.x 版本。请参阅 ext/DB_File/Changes
。
MakeMaker 现在支持编写空 Makefile,提供了一种指定应遵守站点 umask() 策略的方法。它还更好地支持 .packlist 文件的操作以及获取有关已安装模块的信息。
同时具有体系结构相关文件和体系结构无关文件的扩展现在始终完全安装在体系结构相关的目录中。以前,可共享部分在体系结构之间和 perl 版本之间共享,因此可能被具有细微不兼容性的更新版本覆盖。
请参阅 perlmodinstall 和 CPAN。
Cwd::cwd 在大多数平台上更快。
h2ph
及其相关实用程序已彻底改造。
perlcc
是一个新的实验性编译器前端,现已可用。
粗略的 GNU configure
模拟器现在称为 configure.gnu
,以避免在不区分大小写的文件系统下与 Configure
冲突。
perldoc
以前速度很慢。现在,较慢的功能是可选的。特别是,不区分大小写的搜索需要 -i
开关,递归搜索需要 -r
。您可以在 PERLDOC
环境变量中设置这些开关以获得旧的行为。
Config.pm 现在有一个变量词汇表。
Porting/patching.pod 提供了有关如何创建和提交 perl 补丁的详细说明。
perlport 指定了有关如何编写可移植代码的指南。
perlmodinstall 描述了如何从 CPAN
网站获取和安装模块。
现在记录了一些 Perl 陷阱。请参阅 perltrap。
perlopentut 提供了使用 open() 的教程。
perlreftut 提供了关于引用的教程。
perlthrtut 提供了关于线程的教程。
(W) 您声明的子程序与 Perl 关键字同名,并且您在调用其中一个时没有使用限定符。Perl 决定调用内置函数,因为子程序没有被导入。
要强制解释为子程序调用,请在子程序名称之前添加一个 & 符号,或使用其包限定名称。或者,您可以导入子程序(或使用 use subs
编译指示假装它被导入)。
要将其静默地解释为 Perl 运算符,请在运算符上使用 CORE::
前缀(例如 CORE::log($x)
)或将子程序声明为对象方法(请参阅 "attrs")。
(F) 在伪哈希的第 0 个元素中找到的哈希中查找的索引不合法。索引值必须为 1 或更大。请参阅 perlref。
(W) 您使用了 Foo::
形式的限定裸词,但编译器在此之前没有看到该命名空间的其他使用。也许您需要预先声明一个包?
(F) 您使用了方法调用的语法,但由对象引用或包名填充的槽包含一个未定义的值。类似这样的代码会重现错误
$BADREF = 42;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
(P) 出于某种原因,您无法检查脚本的文件系统以查找 nosuid。
(F) 您在需要哈希的地方使用了数组,但该数组没有关于如何从键映射到数组索引的信息。您只能对在索引 0 处具有哈希引用的数组执行此操作。
(F) "goto 子例程" 调用不能用于跳出 eval "字符串"。(您可以使用它跳出 eval {BLOCK},但您可能不想这样做。)
(F) 您使用了类似 local $ar->{'key'}
的语句,其中 $ar 是对伪哈希的引用。这尚未实现,但您可以通过直接本地化相应的数组元素来获得类似的效果:local $ar->[$ar->[0]{'key'}]
。
(F) 第一次使用 %! 哈希时,perl 会自动加载 Errno.pm 模块。Errno 模块应该绑定 %! 哈希以提供 $!
errno 值的符号名称。
(F) 将形式为 CORE::word
的字符串传递给 prototype(),但没有名为 word
的内置函数。
(W) 在正则表达式字符类 ([]) 中,以 "[." 开头并以 ".]" 结尾的语法为将来扩展保留。如果您需要在正则表达式字符类中表示这些字符序列,只需用反斜杠引用方括号:"\[." 和 ".\]"。
(W) 在正则表达式字符类 ([]) 中,以 "[:" 开头并以 ":]" 结尾的语法为将来扩展保留。如果您需要在正则表达式字符类中表示这些字符序列,只需用反斜杠引用方括号:"\[:" 和 ":\]"。
(W) 在正则表达式字符类 ([]) 中,以 "[=" 开头并以 "=]" 结尾的语法为将来扩展保留。如果您需要在正则表达式字符类中表示这些字符序列,只需用反斜杠引用方括号:"\[=" 和 "=\]"。
(F) Perl 在尝试编译包含 (?{ ... })
零宽度断言的正则表达式时检测到污染数据,这是不安全的。请参阅 "(?{ code })" in perlre 和 perlsec。
(F) 正则表达式包含 (?{ ... })
零宽度断言,但该结构仅在 use re 'eval'
编译指示生效时才允许。请参阅 "(?{ code })" in perlre。
(F) Perl 尝试在运行时编译包含 (?{ ... })
零宽度断言的正则表达式,就像在模式包含插值值时一样。由于这存在安全风险,因此不允许。如果您坚持,您仍然可以通过在运行时从插值字符串显式构建模式并在 eval() 中使用它来做到这一点。请参阅 "(?{ code })" in perlre.
(W) 您正在祝福对零长度字符串的引用。这将使引用祝福到包 main 中。这通常不是您想要的。考虑提供一个默认目标包,例如 bless($ref, $p || 'MyPackage');
(W) 您可能尝试在十六进制数中使用除 0-9 或 A-F 之外的字符。十六进制数的解释在遇到非法字符之前停止。
(F) 您尝试将数组作为哈希访问,但使用的字段名称未定义。索引 0 处的哈希应该将所有有效字段名称映射到数组索引才能使其工作。
(F) 您尝试访问类型化变量的字段,但该类型不知道字段名称。字段名称在编译时在类型包中的 %FIELDS 哈希中查找。%FIELDS 哈希通常使用 'fields' 编译指令设置。
(F) 您无法分配超过 2^31+"少量" 字节。此错误最有可能由 Perl 程序中的拼写错误引起。例如,$arr[time]
而不是 $arr[$time]
。
(F) 范围运算符 ".." 的一个(或两个)数字参数超出了内部可以表示的整数范围。一种可能的解决方法是在您的数字前面加上 "0" 来强制 Perl 使用神奇的字符串增量。
(F) 在调用方法时遇到了超过 100 层继承。这可能表明您的继承层次结构中存在意外循环。
(W) 您提供了一个单一引用,而 Perl 期望一个包含偶数个元素的列表(用于分配给哈希)。这通常意味着您在使用匿名哈希构造函数时,本应使用括号。无论如何,哈希需要键值 **对**。
%hash = { one => 1, two => 2, }; # WRONG
%hash = [ qw/ an anon array / ]; # WRONG
%hash = ( one => 1, two => 2, ); # right
%hash = qw( one 1 two 2 ); # also fine
(W) 将未定义的值分配给类型全局变量,例如 *foo = undef
。这没有任何作用。您可能真正想要的是 undef *foo
。
(D) 指示的裸字是保留字。Perl 的未来版本可能会将其用作关键字,因此您最好在使用上下文中以适合的方式显式引用该字,或者使用完全不同的名称。可以通过添加 &
前缀或使用包限定符(例如 &our()
或 Foo::our()
)来抑制子程序名称的警告。
(S) 整个警告消息将类似于
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "En_US",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
失败的区域设置究竟是什么会有所不同。在上面的例子中,设置是 LC_ALL 为 "En_US" 且 LANG 没有值。此错误意味着 Perl 检测到您或您的系统管理员已设置了所谓的变量系统,但 Perl 无法使用这些设置。幸运的是,这不是什么大问题:Perl 可以使用名为 "C" 的“默认区域设置”,脚本将运行。但是,在您真正解决问题之前,每次运行 Perl 时都会收到相同的错误消息。有关如何真正解决问题的详细信息,请参阅 "perllocale 中的区域设置问题"。
(F) 在尝试处理 -e 开关时,mktemp() 例程由于某种原因失败。可能是您的 /tmp 分区已满或已损坏。
已移除,因为-e不再使用临时文件。
(F) 在尝试处理-e开关时,写入例程由于某种原因失败。可能是您的/tmp分区已满或损坏。
已移除,因为-e不再使用临时文件。
(F) 在尝试处理-e开关时,创建例程由于某种原因失败。可能是您的/tmp分区已满或损坏。
已移除,因为-e不再使用临时文件。
(F) 当前的正则表达式实现使用短整型作为字符串内的地址偏移量。不幸的是,这意味着如果正则表达式编译后的长度超过 32767,它就会爆炸。通常,当您需要这么大的正则表达式时,可以使用多个语句来实现,这是一种更好的方法。请参阅perlre。
您可以使用“Configure -Uinstallusrbinperl”,这会导致 installperl 跳过将 perl 安装为 /usr/bin/perl。如果您出于某种原因不想修改 /usr/bin,这很有用,但有害,因为许多脚本假设在 /usr/bin/perl 中找到 Perl。
如果您发现您认为是错误,您可能需要检查 comp.lang.perl.misc 新闻组中最近发布的文章的标题。您也可以在 https://perldotcom.perl5.cn/perl/,Perl 主页上找到信息。
如果您认为您遇到了未报告的错误,请运行随您的发行版提供的perlbug程序。确保将您的错误缩减为一个微小但足够的测试用例。您的错误报告以及perl -V
的输出将被发送到<[email protected]>,由 Perl 移植团队进行分析。
Changes文件,其中包含有关更改的详尽信息。
INSTALL文件,其中包含有关如何构建 Perl 的信息。
README文件,其中包含一般信息。
有关版权信息的 Artistic 和 Copying 文件。
由 Gurusamy Sarathy <[email protected]> 编写,并获得了 Perl 维护者的大量贡献。
请将遗漏或更正发送至 <[email protected]>。