2015-03-03 89 views
1

我有这样的代码,其中数组是散列的数组:Perl数组,键返回一个错误

my $hash = $array[0]; 
print "REF: " . ref($hash) . "\n"; 
my @names = keys ($hash); 

的REF打印井,所以我知道这是一个哈希值。

但随后键函数返回一个错误:

ARG 1键的类型必须为哈希

我如何使用$哈希作为哈希?

谢谢!

+0

的REF打印HASH所以你知道它是*参考*的哈希值。 – ikegami 2015-03-03 13:23:18

回答

1

$hash不是散列,它是散列引用。因此,您需要先取消引用它,然后才能在其上运行密钥。这样做的

最简单的方法:

keys %$hash; 

例如

foreach my $key (keys %$hash) { 
    print $key, " => ", $hash -> {$key},"\n"; 
} 

是的,我故意混合两种解除引用方法。 ->符号表示'取消引用this' - 它通常用于面向对象的东西。

对于更复杂的解引用%$hash{'key'}是不明确的,所以你开始需要括号 - 例如%{$hash{'key'}}

参见:

http://perldoc.perl.org/perlreftut.html

http://perldoc.perl.org/perlref.html

+0

工程就像一个魅力! – 2015-03-03 11:33:48