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
命名空间并没有贯穿所有各种文档(即 perlexperiment
、perldelta
、perldoc
,这似乎很奇怪ETC。)。 perldoc experiment
称其为autoderef
,perldelta5140
称其为auto-deref
。 perldoc 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.
我无意中在 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
命名空间并没有贯穿所有各种文档(即 perlexperiment
、perldelta
、perldoc
,这似乎很奇怪ETC。)。 perldoc experiment
称其为autoderef
,perldelta5140
称其为auto-deref
。 perldoc 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 scalarEXPR
, which must hold a reference to an unblessed array. The argument will be dereferenced automatically. This aspect ofpush
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 removedThe experimental
autoderef
feature (which allowed callingpush
,pop
,shift
,unshift
,splice
,keys
,values
, andeach
on a scalar argument) has been deemed unsuccessful. It has now been removed; trying to use the feature (or to disable theexperimental::autoderef
warning it previously triggered) now yields an exception.