我阅读了关于更改*原型的Perl文档
对原型的更改
子例程原型中的*字符,用于允许裸语优先于大多数(但不是所有)子例程名称。它从来都不一致,并且表现出bug行为。
现在它已经改变,所以子例程总是优先于barewords,这使它与类似的原型内置函数一致
代码示例:
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())。