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个元素,但它没有返回“否”