如何获取取消引用的匿名数组的第 n 个元素?


use strict;
my $anon = [1,3,5,7,9];
my $aref  = [$anon];
print "3rd element: "  . $ { $aref } [2] . "n";

我想让匿名数组的第 n 个元素$anon$aref变量上。在代码中,我想通过创建索引 2 来获取$anon的第 3 个元素,但它没有返回任何内容。如果我写$ { $aref } [0]那么它会返回类似 REF(0x7fd459027ac0( 的东西

如何获得第 n 个元素,例如第 3 个元素$anon

理由:

my @area = (
qw[1 3 5 7 9],
qw[2 4 6 8 0],
qw[a e i u o],
qw[b c d f g]
);
foreach my $row (@area) {
foreach my $cell (@$row)
{
# do some processing on the element
print $cell . " ";
}
print "n";
}

如何获取取消引用的匿名数组的第 n 个元素?

您对运算符的引用太多。您已经构建了一个三层深的嵌套结构,难怪您在导航时遇到麻烦

问题是您的$anon已经是对匿名数组的引用。方括号[...]构造匿名数组并返回对它的引用

然后你有

my $aref  = [$anon]

它创建对具有一个元素的数组的另一个引用:对标量$anon的引用。

所以你已经建立了这个

$anon = [1, 3, 5, 7, 9]
$aref = [  [1, 3, 5, 7, 9] ]

所以

${$aref}[0]          is  [1, 3, 5, 7, 9]
${${$aref}[0]}       is [1, 3, 5, 7, 9]
${${${$aref}[0]}}[2] is 5

但是,为什么要使用对数组的引用,尤其是对标量的引用呢?最好从一个普通数组开始,然后写

my @array = ( 1, 3, 5, 7, 9 );
my $aref = @array;
print $aref->[2];

输出

5

您有一个经典的列表列表数据结构,但有一个转折。您需要获取由$aref给出的外部数组引用的第一个元素,取消引用结果,然后获取该表达式返回的内部数组引用的第n个元素。这应该可以解决问题:

${ $aref->[0] }->[2]

您可能想通读perlll,甚至可能阅读perlref以获取更多信息和想法。如果您可以控制此数据结构,则有更好的方法来构建它。例如,如果它是这样构建的:

my $anon = [1, 3, 5, 7, 9]; # a reference to an anonymous array
my $aref = [$anon]; # a reference to an anonymous array containing only the above reference

您可以简单地执行以下操作:

$aref->[0][2]

最新更新