我有两位产生不同输出的代码,我很难理解为什么。
代码段1:
my @args = $bighash{'arguments'}{'allocations'};
print "$args[0][1]";
代码段2:
my @args = $bighash{'arguments'}{'allocations'}[0];
print "$args[1]";
在第一种情况下,它正在打印我期望的值。在第二种情况下,它根本不打印任何东西。谁能解释一下呢?
答案 0 :(得分:2)
存储在哈希中的值是数组引用。您可以直接使用参考:
my $args = $bighash{'arguments'}{'allocations'};
print $$args[1]; # or $args->[1]
或者您可以将数组解压缩为新数组:
my @args = @{ $bighash{'arguments'}{'allocations'} };
print $args[1];
答案 1 :(得分:2)
Re:使用警告...当您尝试打印新创建的数组中不存在的元素时,您必须收到警告吗?我曾被告知,在我使用严格和警告之前,永远不要在网上询问任何问题。这可能有点极端,但-w和Data :: Dumper绝对帮助我: - )
答案 2 :(得分:0)
在代码片段2中,您有效地获取bighash中的第一个元素([0]是第一个元素)并将其作为数组中的唯一元素。然后你要求第二个元素,它不存在。
如果你记得'使用警告',这应该产生一个,因为你将标量指定为数组。不过,我自己没有测试过这个。