4

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

我的目标是将多个数组传递给一个子例程,该子例程简单地分别遍历每个数组并在每个数组之前和之后打印每个数组。

是)我有的:

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

printdata(@A1, @A2) ;

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

我试图得到的是:

123@@@456@@@

相反,它将两个数组视为一个数组并遍历数组中的每个变量,将分隔符放在每个变量之后,而不是整个数组。

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

我不确定如何让子例程将数组视为单独的而不是一个。

任何帮助将不胜感激!

4

3 回答 3

6

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

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

printdata(\@A1, \@A2) ;

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

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

printdata(@A1, @A2);

等于:

printdata(1,2,3,4,5,6);
于 2011-06-29T12:21:55.720 回答
5

请参阅perldoc perlsub中有关“通过引用传递”的部分。

于 2011-06-29T12:29:22.563 回答
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";
于 2011-06-29T12:45:56.513 回答