Arrays 将数组传递给单独打印每个数组的子例程

Arrays 将数组传递给单独打印每个数组的子例程,arrays,perl,subroutine,Arrays,Perl,Subroutine,我知道这可能是一个简单的解决方案,但我一直无法通过谷歌找到答案,也无法搜索这里的问题 我的目标是将多个数组传递给一个子例程,该子例程只需分别迭代每个数组,并在每个数组前后打印一些内容 我所拥有的: @A1 = (1, 2, 3); @A2 = (4, 5, 6); printdata(@A1, @A2) ; sub printdata { foreach(@_) { print "$_" ; print "@@@" } } 我想得到的是:

我知道这可能是一个简单的解决方案,但我一直无法通过谷歌找到答案,也无法搜索这里的问题

我的目标是将多个数组传递给一个子例程,该子例程只需分别迭代每个数组,并在每个数组前后打印一些内容

我所拥有的:

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

printdata(@A1, @A2) ;

sub printdata {
   foreach(@_) {
      print "$_" ; 
      print "@@@"
      }
   }
我想得到的是:

123@@@456@@@

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

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

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


任何帮助都将不胜感激

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

@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);

请参阅中关于“”的部分。

我喜欢使用有点晦涩的
continue
for(@{print@$}continue{print@@@@@“}
@TLP,酷!。我从未使用过
continue
,它看起来总是像一个丑陋的图钉——可能是来自其他语言的偏见。我可能需要重新考虑。我也从来没有用过它我只是觉得这是一个很有趣的尝试机会。简易助记符:它与c风格for循环中的第三个元素相同,
for(init;inc;*continue*)
但是fishers呢?;)非常感谢,我知道我错过了一些简单的东西。我不完全理解参考文献,但我现在将对其进行研究。这并不简单,通过添加“\”他引入了一个新的perl编程概念,它与您的概念非常不同。您发现perl中的列表上下文。列表是传递给方法的内容(几乎在任何时候使用带逗号的paren)。它们会自动展平其中的任何内容—数组或散列。当将参数传递给函数(例如,您可以在一个数组中构建所有参数,然后将其作为列表传递给函数)或整理来自多个源的数据(例如组合多个哈希或数组)时,这非常方便,但这种“上下文”的概念对大多数程序员来说都是新的,因此可能会让人感到困惑
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";
}
my @a = map { join( '', @$_ ) } \@A1, \@A2;
print join( '@@@', @a ), "\n";