我有一个数组,@array
, 数组引用。如果我使用范围运算符打印 @array
的元素 1 到 3 , print @array[1..3]
, perl 打印元素 1 到 3 的数组引用。
为什么当我尝试取消引用索引在 1 和 3 之间的数组引用时,@{@array[1..3]}
, perl 只取消引用并打印出在范围运算符中索引的最后一个元素?
有没有办法在取消引用数组时使用范围运算符?
示例代码
#!/bin/perl
use strict;
use warnings;
my @array = ();
foreach my $i (0..10) {
push @array, [rand(1000), int(rand(3))];
}
foreach my $i (@array) {
print "@$i\n";
}
print "\n\n================\n\n";
print @{@array[1..3]};
print "\n\n================\n\n";
最佳答案
来自 perldata
:
Slices in scalar context return the last item of the slice.
@{ ... }
将标量值解引用为数组,这意味着被解引用的值在标量上下文中。从上面的 perldata 引用我们知道这将返回最后一个元素。因此结果是最后一个元素。更合理的方法是遍历切片并打印每个单独的数组引用:
use strict;
use warnings;
use feature qw(say);
my @array_of_arrayrefs = (
[qw(1 2 3)],
[qw(4 5 6)],
[qw(7 8 9)],
[qw(a b c)],
);
foreach my $aref ( @array_of_arrayrefs[1..3] ) {
say join ',', @$aref;
}
关于perl - 为什么在使用范围运算符时 perl 只取消引用最后一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569777/