关于在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'
],
};
答案 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
首先是数组的散列。