Perl:使用子例程原型的正确方法[%@ $]

时间:2012-09-25 15:53:36

标签: perl parameter-passing

sub Function(\[$@%]);

Windows上的工作(Windows 7上的Perl v5.14.2),并接受所有3种参数。哈希,标量和列表。

然而,Linux上的相同原型(CentOS版本4.5上的Perl 5.6.1)给了我

Malformed prototype for main::Function: \[%@$].

两者都在进行use 5.006 否则,脚本完全相同。

1 个答案:

答案 0 :(得分:3)

该原型在5.6.1中不存在。它是最近添加的,因为它是在5.14中添加的。 (这意味着它在所有受支持的Perl版本中。)

您不能将数组或散列传递给sub,只能传递标量列表。原型导致调用代码获取引用并传递它。这是你可以通过改变

明确做的事情
sub Function(\[$@%]) { }
Function($s);
Function(@a);
Function(%h);

sub Function { }
Function(\$s)
Function(\@a)
Function(\%h)

无论如何,通常都应避免使用原型。