Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在数组Perl中传递参数_Arrays_Perl_Arguments - Fatal编程技术网

Arrays 在数组Perl中传递参数

Arrays 在数组Perl中传递参数,arrays,perl,arguments,Arrays,Perl,Arguments,我的问题是:我想使用一个参数数量动态的例程。例如,下面是我的sub: dynamic_sub($firstMandatoryArgment, "second argument", $thirdArgument); 我可以使用任意数量的参数调用dynamic_sub(但有些参数是必需的)。在我的程序中,参数的数量取决于上下文。所以我想写一些这样的东西: my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, .

我的问题是:我想使用一个参数数量动态的例程。例如,下面是我的sub:

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);