将数组参数传递给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;也能起到作用)。


以上是将数组参数传递给Perl子例程的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>