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

Perl 如何获取取消引用的匿名数组的第n个元素?,perl,Perl,我想通过$aref变量获取匿名数组$anon的第n个元素。在代码中,我想通过索引2获得$anon的第三个元素,但它没有返回任何内容。如果我写${$aref}[0]那么它返回类似REF(0x7fd459027ac0)的内容 如何获取第n个元素,例如$anon的第3个元素 理由: use strict; my $anon = [1,3,5,7,9]; my $aref = [\$anon]; print "3rd element: " . $ { $aref } [2]

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

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

理由:

use strict;

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

print "3rd element: "  . $ { $aref } [2] . "\n";

您有一个经典的列表数据结构,带有扭曲。您需要获取外部数组引用的第一个元素(由
$aref
给出),取消引用结果,然后获取该表达式返回的内部数组引用的第n个元素。这应该可以做到:

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";
}
你可能想要通读,甚至可能想要更多的信息和想法。如果您可以控制这个数据结构,那么有更好的方法来构建它。例如,如果它是这样建造的:

${ $aref->[0] }->[2]
你可以简单地做:

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
给出),取消引用结果,然后获取该表达式返回的内部数组引用的第n个元素。这应该可以做到:

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";
}
你可能想要通读,甚至可能想要更多的信息和想法。如果您可以控制这个数据结构,那么有更好的方法来构建它。例如,如果它是这样建造的:

${ $aref->[0] }->[2]
你可以简单地做:

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
如何获取取消引用的匿名数组的第n个元素

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

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

那么你有

$aref->[0][2]
这将创建对具有一个元素的数组的另一个引用:对标量
$anon
的引用

所以你建造了这个

my $aref  = [\$anon]
所以

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

${$aref}[0]          is \ [1, 3, 5, 7, 9]
${${$aref}[0]}       is [1, 3, 5, 7, 9]
${${${$aref}[0]}}[2] is 5
输出 如何获取取消引用的匿名数组的第n个元素

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

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

那么你有

$aref->[0][2]
这将创建对具有一个元素的数组的另一个引用:对标量
$anon
的引用

所以你建造了这个

my $aref  = [\$anon]
所以

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

${$aref}[0]          is \ [1, 3, 5, 7, 9]
${${$aref}[0]}       is [1, 3, 5, 7, 9]
${${${$aref}[0]}}[2] is 5
输出
请在邮寄前检查您的代码
$aref->[0]
是标量
\$anon
,不愿意被索引。您的建议将导致“非数组引用”警告。如果一个问题的答案显而易见,你应该三思。啊,我错过了双重参照。谢谢@Borodin。我已经更新了我的答案。谢谢你的回复。我补充了我的问题背后的理由。我想迭代循环中数组的数组元素,以便处理它们。我必须使用
qw
使数组看起来简单易读,但是当我使用
qw
时,数组看起来是匿名的。这就是为什么我试图使用解引用操作符获取这些匿名数组的第n个元素。@Romario在您更新的示例中,实际上最终得到的是一维平坦数组。我建议您使用Data::Dumper之类的工具来检查数据结构,看看实际发生了什么<代码>使用数据::转储程序;模具卸料机(\@区域)我关于阅读perllol的建议站得住脚@是的,这是一种一维数组,我只是不能对它进行任何适当的迭代。我试着让它像(截图)一样,但仍然难以迭代。我已经添加了Data::Dumper,但无法获得任何有用的信息,所以我放弃了使用它。请在发布之前检查您的代码
$aref->[0]
是标量
\$anon
,不愿意被索引。您的建议将导致“非数组引用”警告。如果一个问题的答案显而易见,你应该三思。啊,我错过了双重参照。谢谢@Borodin。我已经更新了我的答案。谢谢你的回复。我补充了我的问题背后的理由。我想迭代循环中数组的数组元素,以便处理它们。我必须使用
qw
使数组看起来简单易读,但是当我使用
qw
时,数组看起来是匿名的。这就是为什么我试图使用解引用操作符获取这些匿名数组的第n个元素。@Romario在您更新的示例中,实际上最终得到的是一维平坦数组。我建议您使用Data::Dumper之类的工具来检查数据结构,看看实际发生了什么<代码>使用数据::转储程序;模具卸料机(\@区域)我关于阅读perllol的建议站得住脚@是的,这是一种一维数组,我只是不能对它进行任何适当的迭代。我试着让它像(截图)一样,但仍然难以迭代。我添加了Data::Dumper,但无法获得任何有用的信息,所以我放弃了使用它。“匿名数组
$anon
$aref
变量上的第n个元素
$aref
变量“意味着什么?”我想通过索引2获得$anon的第3个元素,但它没有返回“否”