Perl:实验特征和Perldoc

时间:2015-07-17 00:51:40

标签: perl perldoc

我无意中在Perl 5.20中使用了Perl 5.14的实验autoderef功能,当然还收到有关其使用的警告。 diagnostics编译指示解释了如果需要,如何抑制这些警告消息;但是,我想了解更多有关此警告的根本原因(实际上是整体功能),因此我转向perldoc了解有关autoderef的更多信息。

perldoc experimental命令列出了autoderef功能,其中包含有关其用途的高级声明,但仅此而已。

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

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

使用warning追踪此类diagnostics / perldoc条消息的有效方法是什么? perldoc

中是否涵盖了实验性功能

更新:请参阅下面的@ ThisSuitIsBlackNot的优秀答案。

为了进一步明确和参考:autoderef命名空间并不适用于所有各种文档(即perlexperimentperldeltaperldoc等,这似乎很奇怪。 )。 perldoc experiment将其称为autoderefperldelta5140将其称为auto-derefperldoc perlexperiment使用了perldelta页面中的某种语言,但未使用autoderef等。

由于diagnostics声明可以使用no warnings "experimental::autoderef"来抑制相关警告。将它作为perldoc的起点将是很好的。也就是说,找到perldoc experimental::autoderef的相关文档,与diagnostics和/或warnings提供的语法和语义相匹配。

1 个答案:

答案 0 :(得分:5)

当在Perl核心中添加或删除功能时,它们会记录在perldelta中,因此如果您收到关于正在进行实验的功能的警告,那么这是一个值得关注的好地方。

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

perldoc perl5140delta

如果不是:

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

您在perl5140delta中链接到的描述本身非常详尽,但请注意它提供了autoderef应用的内置函数列表。运行perldoc -f <function>以查看内置函数的文档,例如perldoc -f push

  

从Perl 5.14开始,push可以使用标量EXPR,它必须包含对未经过处理的数组的引用。该参数将自动解除引用。 push的这一方面被认为是高度实验性的。在未来的Perl版本中,确切的行为可能会发生变化。

警告的原因记录在perl5200delta

  

“auto-deref”功能是实验性的。

     

从v5.14.0开始,不仅可以在聚合类型上使用push,pop,keys和其他内置函数,还可以使用它们的引用。该功能未部署到其原始预期规范,现在可能成为后缀解除引用的冗余。它一直被归类为实验性特征,并且在v5.20.0中也会发出警告。

实际上,perlexperiment中提到了autoderef ,虽然它位于“数组和散列容器函数接受引用”标题下(perl5140delta中使用的标题相同):

  
      
  • 数组和哈希容器函数接受引用

         

    在Perl 5.14.0中引入

         

    此功能的票证是[perl#119437]。

  •   

如果您查看online documentation,则可以点击Perl问题跟踪器中issue #119437的链接,您可以在其中跟踪与该功能相关的开发详情。

如果您感到好奇,在下一个版本中看起来像autoderef is getting axed

  

autoderef功能已被删除

     

实验autoderef功能(允许调用pushpopshiftunshiftsplicekeysvalueseach关于标量参数)被认为是不成功的。它已被删除;尝试使用该功能(或禁用之前触发的experimental::autoderef警告)现在会产生异常。