使用Perl的原型有什么缺点吗?

edu*_*tex 0 perl prototype subroutine

我想在参数列表周围不使用括号来调用我的潜艇.例如,我想使用

mypush \@list, $item;
Run Code Online (Sandbox Code Playgroud)

代替

mypush(\@list, $item);
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我已经用原型声明了我的子.

sub mypush (+@) { push shift, @_ }
Run Code Online (Sandbox Code Playgroud)

事实上,这也允许我进行以下操作,但这只是一个奖励:

mypush @list, $item;
Run Code Online (Sandbox Code Playgroud)

除了在代码中的任何地方使用它们之前必须使用原型声明子例程之外,在Perl中使用原型是否有任何严重的缺点?

代码看起来对我来说绝对清晰.但一般情况下原型出错的地方?我什么时候后悔呢?

bri*_*foy 5

最大的缺点之一是它使代码难以维护.很少有人似乎明白Perl原型实际上是做什么的,所以他们周围有很多猜测和货物结果.

但请注意,Perl 5.20添加了子程序签名功能.它仍然是实验性的,但它真的很棒,大多数人都希望原型能做到.并且,当我们添加类型约束时(哦圣诞老人,请请带给我圣诞节的那些我保证我会很好!),我们将拥有我认为大多数人尝试用原型做的事情(我做了一些语法)上):

sub foo (Int $foo, String $var, Int @array) { ... }
Run Code Online (Sandbox Code Playgroud)