2014-04-13 83 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