2012-09-28 39 views
1

我有以下hashref: -的Perl hashref打印鍵

my $hashref = {'a'=>(1,2,3,4), 
       'b'=>(5,6,7,8)}; 

然後我用下面只打印鍵(即 'A' 和 'B'): -

foreach (keys %$hashref){ 
    print "\n".$_."\n"; 
} 

這將打印輸出如下: -

4 

a 

7 

2 

5 

嘗試打印使用數據::自卸車的數據結構hashref給出了以下的輸出: -

$VAR1 = { 
      '4' => 'b', 
      'a' => 1, 
      '7' => 8, 
      '2' => 3, 
      '5' => 6 
     }; 

我的問題是: -

1)如何只打印正確的鍵即 'A' 和 'B'。 2)爲什麼數據結構看起來像一個在上面的輸出,而不是像: -

$VAR1 = { 
      'a' => (1,2,3,4), 
      'b' => (5,6,7,8) 
     }; 
+0

使用''%定義一個哈希..'$'用來聲明標量類型.. –

+2

一名匿名hashref包圍'{..}'*是*標量值。 – TLP

回答

7

您所定義的哈希錯誤。它解釋爲:

'a'=>(1,2,3,4), 
'b'=>(5,6,7,8) 

只是一個10個元素的列表。 (請記住,哈希也可以使用一個簡單的列表中,=>操作是可選的聲明。)相反,用方括號來讓你的值到數組引用文字:

'a'=>[1,2,3,4], 
'b'=>[5,6,7,8] 

數據::自卸車應該叫:

$VAR1 = { 
    'a' => [1,2,3,4], 
    'b' => [5,6,7,8] 
}; 
+0

我知道,但它已經以這種方式編碼,所以我需要弄清楚得到鑰匙的方法。 – AAB

+4

這就是我的觀點,你/只是拿到鑰匙。這些是關鍵。哈希聲明獲得10個元素的列表,它將其解釋爲5個鍵和5個值。 – Dan

+2

@AAB你不能得到'a'和'b',因爲哈希沒有被正確定義。正確的解決方案是正確定義散列。沒有其他解決方案。 – TLP