我知道这可能是一个简单的解决方法,但我无法通过谷歌找到答案并在此处搜索问题。
我的目标是将多个数组传递给一个子程序,该子程序只是单独遍历每个数组,并在每个数组前后打印一些内容。
我有什么:
@A1 = (1, 2, 3);
@A2 = (4, 5, 6);
printdata(@A1, @A2) ;
sub printdata {
foreach(@_) {
print "$_" ;
print "@@@"
}
}
我想要的是:
123 @@@ 456 @@@
相反,它将两个数组视为一个并迭代数组中的每个变量,将每个变量后面的分隔符放在整个数组之后。
1 @@@ 2 @@@ 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";