这是代码:
my @items = (); # this is the array
my %x = {}; # the hash I'm going to put into the array
$x{'aa'} = 'bb'; # fill it up with one key-value pair
push(@items, $x); # add it to the array
my %i = @items[0]; # taking it back
print $i{'aa'}; # taking the value by the key
我希望它能打印bb
,但它什么也没打印。我做错了什么?
1条答案
按热度按时间zujrkrfu1#
我做错了什么?
这可不是你想的那样
您可以轻松检查:
输出:
第一行来自
use warnings;
,如果你不用它,现在就开始。为什么hash的内容如此奇怪呢?花括号创建了一个hash引用。因为键必须是字符串,所以引用被字符串化为
HASH(0xADDR)
。你不需要引用,你需要一个键和值的列表。实际上,每个哈希和数组都是空的,因此您不必使用任何内容:
或者,您可以直接填充它,而不是在下一行单独填充:
同样,这也行不通:
它将标量变量
$x
的值压入@items
,但是没有这样的变量。看起来你没有使用use strict;
。现在就开始吧,它会让你避免类似的错误。您希望将哈希值推送到数组中,但数组值是标量,因此需要使用哈希值的引用。
不,你想从数组中检索哈希值。同样,这是行不通的:
你提取的是一个值,因此,你不应该使用
@
。此外,我们现在在数组中有一个引用,要填充哈希值,我们需要先解引用它:瞧,成功了!