2014-04-13 117 views
1

有關在Perl中推送到多維散列的快速問題。我有以下變量:在Perl中使用多維哈希?

%pids #name of hash 
$pid = 24633 #key of the has 
$time 00:0 #time reference 
$line #has a line full of data 

我從$行輸入$ pid和$ time。如果鍵24633與參考元素05:3一起存在,則將該行添加到05:3並使用05:3作爲鍵。

的PID {24633} {05:3}

我已經試過:

if ($pids{$pid}{$time}){ 
    @{$pids{$pid}{$time}} -> $line; 
} 

我也試過這樣:

if ($pids{$pid}{$time}){ 
    push @{$pids{$pid}{$time}}, $line; 

但它不斷給我一個「 「當它試圖推動時,不是HASH參考。有什麼建議麼?謝謝!

這是我正在創建的哈希:

foreach my $key (keys %pids){ 
    if ($key =~ $mPID){ 
    push @messages, $line; 
    } 
} 

這裏的哈希結構:

$VAR1 = { 
     '17934' => [ 
        '14:3' 
       ], 
     '17955' => [ 
        '13:3' 
       ], 
     '24633' => [ 
        '05:3' 
       ], 
     '6771' => [ 
        '04:1' 
       ], 
     '7601' => [ 
        '06:0' 
       ], 
}; 
+0

你有一個數組哈希表,但您嘗試使用它作爲哈希散列。你的代碼也與這個問題無關,因爲它沒有顯示你如何構建你的散列。 – TLP

+0

我已經包括瞭如何建立它,謝謝 – cycloxr

+0

不,你沒有。您已經包括瞭如何使用散列來嘗試構建一個數組,而當前代碼將使用未定義的值填充數組。 (因爲你使用'$ key',但是存儲'$ line'。) – TLP

回答

1

當你試圖訪問你的%pids結構被初始化爲數組的哈希它作爲散列的散列

use strict; 
use warnings; 

my %pids = ( 
    '17934' => [ '14:3' ], 
    '17955' => [ '13:3' ], 
    '24633' => [ '05:3' ], 
    '6771' => [ '04:1' ], 
    '7601' => [ '06:0' ], 
); 

print $pids{7601}[0], "\n"; # Prints 06:0 

print $pids{7601}{"06:0"}; # Error 

你必須弄清楚爲什麼你的%pids首先是數組的散列,如果您真的希望它是數組散列的散列。

+0

爲什麼我會用另一個呢?原諒我,仍然在學習。並感謝您的鏈接,很多很好的信息 – cycloxr

+0

爲什麼要在數組上使用散列?如果你想要一個有序的值列表,你會使用一個數組。如果你想要關鍵的價值對關係,你會使用散列。只有你知道你的數據,因此需要哪一個。 – Miller

+0

謝謝。我的意思是散列或哈希散列的散列 – cycloxr