Arrays 在数组Perl中传递参数
我的问题是:我想使用一个参数数量动态的例程。例如,下面是我的sub:Arrays 在数组Perl中传递参数,arrays,perl,arguments,Arrays,Perl,Arguments,我的问题是:我想使用一个参数数量动态的例程。例如,下面是我的sub: dynamic_sub($firstMandatoryArgment, "second argument", $thirdArgument); 我可以使用任意数量的参数调用dynamic_sub(但有些参数是必需的)。在我的程序中,参数的数量取决于上下文。所以我想写一些这样的东西: my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, .
dynamic_sub($firstMandatoryArgment, "second argument", $thirdArgument);
我可以使用任意数量的参数调用dynamic_sub(但有些参数是必需的)。在我的程序中,参数的数量取决于上下文。所以我想写一些这样的东西:
my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, ...);
dynamic_sub(@args);
问题是我无法重写dynamic_sub(),所以我必须找到一种方法将参数放入数组,然后用参数数组调用dynamic_sub()。当然@args应该解释为多个参数,而不是数组;)
提前谢谢你 在Perl中,子例程获取一系列参数,这些参数在内部分配给数组
@
。因此,在大多数情况下,使用数组或值列表调用sub是相同的
一个例外是,当子例程使用原型时:
唯一可以作为参数传递的是标量列表,所以
my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, ...);
dynamic_sub(@args);
是同一件事吗
my @args = ( $firstMandatoryArgment, "second argument", $thirdArgument, ... );
dynamic_sub($args[0], $args[1], $args[2], ...);
如果子系统(愚蠢地)使用原型来覆盖此行为,则可以使用和覆盖原型:
&dynamic_sub(@args);
您确实将参数放入了一个数组中。问题是什么?如果所有参数都是标量,那么就没有问题了。如果一个参数是数组,那么在方法中将参数“移位”到局部变量时必须小心。然后你可以使用参考资料。但你的问题是什么?好吧,它是有效的。我犯了一个错误:(将多个选项作为数组传递给sub不是一个好的设计。混淆参数顺序或添加新的甚至可能是必需的选项迟早会导致失败。最好将参数作为哈希引用传递{optionA=>$valueA,optionB=>$valueB…}
。您可以使用exists$hash_ref->{key}
检查选项的存在性。在Perl中使用命名参数不需要使用hashref。分配my%args=@
就可以了,无需在参数列表周围键入{}
。
&dynamic_sub(@args);