2012-02-22 143 views
0

我希望“testhash”是一个散列,其中包含一个“hashelm”键,其中包含一个数组或数组。数组阵列的哈希元素

我这样做:

$testhash{hashelm}=(
     ["1A","1B"], 
     ["2A","2B"] 
); 

print Dumper(%testhash); 

但我得到这个作为输出:

$VAR1 = 'hashelm'; 
$VAR2 = [ 
      '2A', 
      '2B' 
     ]; 

我希望更多的东西一样:

$VAR1 = 
    hashlelm => (
     [ 
      '1A', 
      '1B' 
     ]; 
     [ 
      '2A', 
      '2B' 
     ]; 
    ) 

我在想什么? 我一直在使用Perl的,这一个真的让我难住!

回答

5

散列只能存储标量值; (["1A", "1B"], ["2A", "2B"])是一个列表值。在此标量上下文中进行评估时,您只能得到列表中的最后一项,即["2A", "2B"]。你需要存储在哈希参考到一个列表值:

$testhash{hashelm} = [ ["1A","1B"], ["2A","2B"] ]; 

了解更多关于list value constructors perl的文档。

+0

哇 - 经过这段时间 - 从来没有真正挖掘过列表和数组之间的区别。然而,关于只存储标量值的散列部分很有意义。谢谢! – Brad 2012-02-22 23:12:11

5

这将工作:

$testhash{hashelm}=[ 
     ["1A","1B"], 
     ["2A","2B"] 
]; 

你必须使用方括号匿名数组。