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

时间:2011-06-29 12:18:59

标签: arrays perl subroutine

我知道这可能是一个简单的解决方法,但我无法通过谷歌找到答案并在此处搜索问题。

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

我有什么:

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

printdata(@A1, @A2) ;

sub printdata {
   foreach(@_) {
      print "$_" ; 
      print "@@@"
      }
   }

我想要的是:

123 @@@ 456 @@@

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

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

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

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:6)

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

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

printdata(\@A1, \@A2) ;

sub printdata {
   foreach(@_) {
      print @$_ ; 
      print "@@@"
      }
}

子调用将数组扩展为标量列表,然后传递给@_变量中的子标量。 E.g:

printdata(@A1, @A2);

等于:

printdata(1,2,3,4,5,6);

答案 1 :(得分:5)

请参阅Pass by Reference中的“perldoc perlsub”部分。

答案 2 :(得分:2)

use strict;
use warnings;
use English qw<$LIST_SEPARATOR>;

my @A1 = (1, 2, 3);
my @A2 = (4, 5, 6);
{   local $LIST_SEPARATOR = '';
    my @a = map { "@$_" } \@A1, \@A2;
    $LIST_SEPARATOR = '@@@';
    print "@a\n";
}

你也可以使用join(po-tay-to,po-tah-to)。

my @a = map { join( '', @$_ ) } \@A1, \@A2;
print join( '@@@', @a ), "\n";