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
。
否则,脚本完全相同。
答案 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)
无论如何,通常都应避免使用原型。