我读了关于* 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())。