在Perl中使用多维哈希?

时间:2014-04-13 21:27:42

标签: arrays perl hash

关于在Perl中推送到多维哈希的快速问题。我有以下变量:

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

我从$ line输入$ 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'
                ],
};

1 个答案:

答案 0 :(得分: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首先是数组的散列。