访问数组中的数组

时间:2011-10-27 22:42:27

标签: perl

我有两位产生不同输出的代码,我很难理解为什么。

代码段1:

my @args = $bighash{'arguments'}{'allocations'};
print "$args[0][1]";

代码段2:

my @args = $bighash{'arguments'}{'allocations'}[0];
print "$args[1]";

在第一种情况下,它正在打印我期望的值。在第二种情况下,它根本不打印任何东西。谁能解释一下呢?

3 个答案:

答案 0 :(得分:2)

存储在哈希中的值是数组引用。您可以直接使用参考:

my $args = $bighash{'arguments'}{'allocations'};
print $$args[1];  # or $args->[1]

或者您可以将数组解压缩为新数组:

my @args = @{ $bighash{'arguments'}{'allocations'} };
print $args[1];

有关perlrefperldsc手册页的详细信息。

答案 1 :(得分:2)

Eric Strom的答案基本上就是你说得对...但我很惊讶没有人建议使用Data :: Dumper来检查你正在使用的数据结构。你可以真正看到你所做的和埃里克的纠正之间的区别。这可能有助于为您做好准备。

Re:使用警告...当您尝试打印新创建的数组中不存在的元素时,您必须收到警告吗?我曾被告知,在我使用严格和警告之前,永远不要在网上询问任何问题。这可能有点极端,但-w和Data :: Dumper绝对帮助我: - )

答案 2 :(得分:0)

在代码片段2中,您有效地获取bighash中的第一个元素([0]是第一个元素)并将其作为数组中的唯一元素。然后你要求第二个元素,它不存在。

如果你记得'使用警告',这应该产生一个,因为你将标量指定为数组。不过,我自己没有测试过这个。