我在尝试打印包含数组的数组时遇到问题。打印包含其他数组的数组@dev
时,我只能打印前三个,因为#printing
内嵌注释表示。注释行#print($dev[4][2]);
工作正常,以及允许范围内的任何其他数字组合。由于某种原因,for循环不起作用。救命啊!?
my @dev;
my @tf;
my @a;
my @t;
my @f;
my @ofv;
my @tfv;
@tf = ('123456787', '123456788', '123456789'); #printing
@a = (78, 65, 57); #printing
@t = (70, 55, 42); #printing
@f = (77, 64, 56);
@ofv = ('true', 'false', 'false');
@tfv = ('false', 'true', 'true');
@dev = (
[@tf],
[@a],
[@t],
[@f],
[@ofv],
[@tfv],
);
#print($dev[4][2]);
for (my $i = 0; $i <= (scalar(@tf) - 1); $i++) {
for (my $j = 0; $j <= (scalar(@dev) - 1); $j++) {
print($dev[$i][$j]);
print("\n");
}
}
谢谢。
答案 0 :(得分:3)
Perl可以非常紧凑。 这段代码为我的数组@ arr1,@ arr2和@ arr3做了同样的事情:
@arr1 = (1..10);
@arr2 = ('a'..'j');
@arr3 = ('.') x 10;
@multid = \(@arr1, @arr2, @arr3);
print "@$_\n" for (@multid);
输出:
1 2 3 4 5 6 7 8 9 10
a b c d e f g h i j
. . . . . . . . . .
同样[]
复制一个数组并给它一个引用(它是内存中的一个匿名数组,不管数组是什么,都是他的副本)。如果不需要这样的重复,最好使用反斜杠\
,而不是应对现有数组的引用。 (比如C中的&
运算符,告诉我们perldoc)
答案 1 :(得分:3)
如果您只想显示此类复杂数据结构的数据,则模块Data::Dumper或Smart::Comments可能是不错的选择。
use Data::Dumper;
print Dumper(\@dev);
或
use Smart::Comments;
### @dev
输出更加perl风格并且不那么可读,但是显示这种复杂数据的结构非常方便。
答案 2 :(得分:1)
你的最外面的for循环受到t的长度约束,它是3.它永远不会打印超过三个数组。
如果我理解你要做什么,你需要顶级交换@t和@dev。这将打印您的所有价值。
然而,这不会打印任何长于3的数组(dev的长度)。
为此,您需要:
@dev = (
[@tf], # Probably meant tf
[@a],
[@t],
[@f],
[@ofv],
[@tfv],
);
#print($dev[4][2]);
for (my $i = 0; $i < @dev; $i++) {
for (my $j = 0; $j < @{ $dev[$i] }; $j++) {
print($dev[$i][$j]);
print("\n");
}
}