Perl 5.22和以前版本有*原型的子程序有什么不同?

  • 本文关键字:子程序 原型 版本 Perl perl
  • 更新时间 :
  • 英文 :


我读了关于* prototype的更改的Perl文档

* prototype的更改
子例程原型中的*字符,用于允许裸字优先于大多数(但不是全部)子例程名称。它从来不是一致的,并表现出错误的行为。

现在它已经改变了,所以子程序总是优先于裸字,这使它与类似的原型内置函数

一致

代码例子:

sub splat(*) { ... }
sub foo { ... }
splat(foo); # now always splat(foo())
splat(bar); # still splat('bar') as before
close(foo); # close(foo())
close(bar); # close('bar')
谁能给我解释一下它们的区别吗?谢谢你的帮助。

perldelta条目所陈述的是,当foo()是一个预定义函数时,那么在5.22之前,调用splat(foo)可能被解析器解释为splat(foo())或splat('foo'),但是您不容易区分哪一个。现在它将始终被视为splat(foo())。

最新更新