内容

名称

perl5241delta - perl v5.24.1 的新功能

描述

本文档描述了 5.24.0 版本和 5.24.1 版本之间的差异。

如果您要从 5.22.0 等早期版本升级,请先阅读 perl5240delta,其中描述了 5.22.0 和 5.24.0 之间的差异。

安全

-Di 开关现在是 PerlIO 调试输出所必需的

以前,如果 perl 不是以 setuid 方式运行并且尚未解析 -T-t 开关,则 PerlIO 调试输出将发送到由 PERLIO_DEBUG 环境变量指定的 文件。

如果 Perl 在解析其开关之前执行输出,这会导致 Perl 创建或覆盖名为 PERLIO_DEBUG 的文件,即使提供了 -T 开关。

Perl 现在需要 -Di 开关才能生成 PerlIO 调试输出。默认情况下,这将写入 stderr,但可以选择通过设置 PERLIO_DEBUG 环境变量将其重定向到文件。

如果 Perl 以 setuid 方式运行或提供了 -T 开关,则会忽略 PERLIO_DEBUG,调试输出将发送到 stderr,就像其他任何 -D 开关一样。

核心模块和工具不再搜索 "." 以查找可选模块

核心提供的工具和许多模块不再搜索 @INC 中的默认当前目录条目以查找可选模块。例如,Storable 将从 @INC 中删除最后的 ".",然后再尝试加载 Log::Agent

这可以防止攻击者将可选模块注入到另一个用户运行的进程中,其中当前目录可由攻击者写入,例如 /tmp 目录。

在大多数情况下,此删除不应造成问题,但在 base 中遇到了困难,它将提供的每个模块名称都视为可选。这些困难尚未解决,因此对于此版本,base 没有更改。我们希望在 Perl 5.24.2 中为 base 提供修复程序。

为了保护您自己的代码免受此攻击,请在脚本开头从 @INC 中删除默认的 "." 条目,因此

#!/usr/bin/perl
use strict;
...

变为

#!/usr/bin/perl
BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
...

或者对于模块,从本地化的 @INC 中删除 ".",因此

my $can_foo = eval { require Foo; }

变为

my $can_foo = eval {
    local @INC = @INC;
    pop @INC if $INC[-1] eq '.';
    require Foo;
};

不兼容的更改

除了上述安全更改之外,没有其他有意与 Perl 5.24.0 不兼容的更改。如果存在任何不兼容,它们是错误,我们要求您提交报告。请参见下面的 "报告错误"

模块和语义

更新的模块和语义

文档

现有文档的更改

perlapio

perlrun

测试

选定的错误修复

致谢

Perl 5.24.1 代表了自 Perl 5.24.0 发布以来的大约 8 个月的开发,包含了来自 18 位作者的 240 个文件中的大约 8,100 行更改。

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

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

Aaron Crane, Alex Vandiver, Aristotle Pagaltzis, Chad Granum, Chris 'BinGOs' Williams, Craig A. Berry, Father Chrysostomos, James E Keenan, Jarkko Hietaniemi, Karen Etheridge, Leon Timmermans, Matthew Horsfall, Ricardo Signes, Sawyer X, Sébastien Aperghis-Tramoni, Stevan Little, Steve Hay, Tony Cook.

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

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

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

报告错误

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

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

如果您要报告的错误涉及安全隐患,不适合发送到公开存档的邮件列表,请参阅 "perlsec 中的 SECURITY VULNERABILITY CONTACT INFORMATION",了解如何报告此问题。

另请参阅

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

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

README 文件,了解一般信息。

ArtisticCopying 文件,了解版权信息。