将数组参数传递给Perl子例程
我是 perl 编程的新手,我正在尝试使用几个子例程来构建一个脚本。首先,我试图运行一个简短的模拟脚本来计算子程序的行为,但我无法理解输入。
这是我的代码:
sub prueba{
my (@array1, @array2)=@_;
if (scalar(@array1)<scalar(@array2)) {
print @array1,"n";
} elsif (scalar(@array1)>scalar(@array2)){
print @array2,"n";
}
};
my @primero=(1,5,9);
my @segundo=(1,7,8,9,6,5,6,9);
prueba(@primero,@segundo);
sub prueba{
my (@array1, @array2)=@_;
if (scalar(@array1)<scalar(@array2)) {
print @array1,"n";
} elsif (scalar(@array1)>scalar(@array2)){
print @array2,"n";
}
};
my @primero=(1,5,9);
my @segundo=(1,7,8,9,6,5,6,9);
prueba(@primero,@segundo);
我正在传递两个数组,我希望子例程根据这些数组检索答案,但是当我运行它时,我没有输出,甚至没有警告错误消息......我已经尝试使用对数组的引用,但仍然没有在职的:
回答
您不能将数组传递给 subs(并且它们不能返回它们)。您只能传递一些标量。你正在做的相当于以下内容:
prueba(1,5,9,1,7,8,9,6,5,6,9);
所有的论点都以@array1
. 我们所做的是传递对数组的引用。
prueba(@primero,@segundo);
但这也需要更改子程序。没有变化,所有参数仍然以@array1
. 有关使用引用的开始,请参阅perlreftut。您可以使用
sub prueba{
my ($array1, $array2)=@_;
if (scalar(@$array1)<scalar(@$array2)) {
print "@$array1n";
} elsif (scalar(@$array1)>scalar(@$array2)){
print "@$array2n";
}
}
要不就
sub prueba {
my ($array1, $array2) = @_;
if (@$array1 < @$array2) { say "@$array1"; }
elsif (@$array1 > @$array2) { say "@$array2"; }
}
<
并>
期望一个数字,所以他们已经强加了标量上下文。也可以使用say
,尽管这需要use feature qw( say );
(或类似的东西use 5.014;
也能起到作用)。