Perl:实验特性和 Perldoc

Perl: Experimental Features and Perldoc

我无意中在 Perl 5.20 中使用了 Perl 5.14 的实验性 autoderef 功能,当然收到了有关其使用的警告。 diagnostics pragma 解释了如何在需要时抑制这些警告消息;但是,我想了解有关此警告的根本原因(以及整个功能)的更多信息,因此我转向 perldoc 以了解有关 autoderef.

的更多信息

perldoc experimental 命令列出 autoderef 功能及其用途的高级说明,但仅此而已。

perldoc perlexperiment 命令提供了有关其他实验性功能的更多详细信息,但根本没有提及 autoderef

我尝试了各种其他 perldoc 选项(例如,-v-f 等),但无济于事。

使用 perldoc 追溯此类 warning / diagnostics 消息的有效方法是什么? perldoc 中是否包含实验性功能?

更新:请参阅下面@ThisSuitIsBlackNot 的出色回答。

为了进一步清晰和参考:autoderef 命名空间并没有贯穿所有各种文档(即 perlexperimentperldeltaperldoc,这似乎很奇怪ETC。)。 perldoc experiment称其为autoderefperldelta5140称其为auto-derefperldoc perlexperiment 使用了 perldelta 页面中的某些语言,但没有使用 autoderef 之类的语言。

由于 diagnostics 声明可以使用 no warnings "experimental::autoderef" 抑制相关警告。最好将其用作 perldoc 中的起点。也就是说,查找相关文档 perldoc experimental::autoderef,匹配 diagnostics and/or warnings.

提供的语法和语义

在 Perl 核心中添加或删除功能时,它们会记录在 perldelta 中,因此如果您收到有关功能处于试验阶段的警告,那是个不错的地方。

如果您知道该功能是在 Perl 5.14.0 中添加的:

perldoc perl5140delta

如果不是:

grep -lr autoderef $(dirname $(perldoc -l perldelta))

您在 perl5140delta 中链接到的描述本身就非常详尽,但请注意它给出了 autoderef 适用的 built-in 函数的列表。 运行 perldoc -f <function> 查看 built-in 函数的文档,例如perldoc -f push:

Starting with Perl 5.14, push can take a scalar EXPR, which must hold a reference to an unblessed array. The argument will be dereferenced automatically. This aspect of push is considered highly experimental. The exact behaviour may change in a future version of Perl.

警告的原因记录在 perl5200delta:

The "auto-deref" feature is experimental.

Starting in v5.14.0, it was possible to use push, pop, keys, and other built-in functions not only on aggregate types, but on references to them. The feature was not deployed to its original intended specification, and now may become redundant to postfix dereferencing. It has always been categorized as an experimental feature, and in v5.20.0 is carries a warning as such.

实际上,autoderef perlexperiment 中提到的,尽管它在标题 "Array and hash container functions accept references" 下(与 perl5140delta 中使用的标题相同) :

  • Array and hash container functions accept references

    Introduced in Perl 5.14.0

    The ticket for this feature is [perl #119437].

如果您在 Perl 的问题跟踪器中查看 online documentation, you can follow the link to issue #119437,您可以在其中关注与该功能相关的开发细节。


如果你好奇的话,下一个版本看起来像 autoderef is getting axed

The autoderef feature has been removed

The experimental autoderef feature (which allowed calling push, pop, shift, unshift, splice, keys, values, and each on a scalar argument) has been deemed unsuccessful. It has now been removed; trying to use the feature (or to disable the experimental::autoderef warning it previously triggered) now yields an exception.