将数组传递给子程序,该子程序分别打印每个数组

Kev*_*vin 4 arrays perl subroutine

我知道这可能是一个简单的修复,但我无法通过谷歌找到答案并在这里搜索问题.

我的目标是将多个数组传递给一个子程序,该子程序只是单独遍历每个数组,并在每个数组之前和之后打印一些内容.

是)我有的:

@A1 = (1, 2, 3);
@A2 = (4, 5, 6);

printdata(@A1, @A2) ;

sub printdata {
   foreach(@_) {
      print "$_" ; 
      print "@@@"
      }
   }
Run Code Online (Sandbox Code Playgroud)

我想要得到的是:

123 @@@ 456 @@@

相反,它将两个数组视为一个并迭代数组中的每个变量,将每个变量后面的分隔符放在整个数组之后.

1 @@@ 2 @@@ 3 @@@等.....

我不知道如何让子程序将数组视为单独的而不是一个.

任何帮助将不胜感激!

TLP*_*TLP 6

您需要将数组作为引用传递:

@A1 = (1, 2, 3);
@A2 = (4, 5, 6);

printdata(\@A1, \@A2) ;

sub printdata {
   foreach(@_) {
      print @$_ ; 
      print "@@@"
      }
}
Run Code Online (Sandbox Code Playgroud)

子调用将数组扩展为标量列表,然后将其传递给@_变量中的sub .例如:

printdata(@A1, @A2);
Run Code Online (Sandbox Code Playgroud)

等于:

printdata(1,2,3,4,5,6);
Run Code Online (Sandbox Code Playgroud)