2013-12-12 45 views
0

我试图生成一个多维散列,其中包含与该密钥关联的一个密钥和两个值。这是我的样本输入文件生成一个多维散列,其中包含一个密钥和与该密钥相关联的两个值

layer_def A1 10001; 

layer_map 2 -datatype 2 10001; 



layer_def A2 10002; 

layer_map 3 -datatype 2 10002; 

我想与第二线(即10001与10001)的最后一个元素(第3模式),第一行的最后一个元素(第2模式)比较,如果它们相等,则从第二行挑选第一行的第一个模式和第一个模式,并将它们推入散列,其键将是第一行的Ist模式,并且值将是第一行&第二行从第二行开始。而后来想用这个哈希生成的输出格式类似

预期样品输出

A1 = layer(2 type(2)) 
A2 = layer(3 type(2)) 

我试着用下面的示例代码,但看起来,我们不能将多值一个键。

sample perl code.. 

#!/usr/bin/perl -w 
use strict(); 
my $inFile = shift @ARGV; 
my %cdnsInt=(); 
my %layerInfo=(); 
my %outHash=(); 

open layerMap, $inFile or die "can't read $inFile \n"; 
while(my $line = <layerMap>) { 
    if($line =~ /^\s*layer_map\s+(\S+)\s+-datatype\s+(\S+)\s+(\S+)\s*;/gi) { 
    %layerInfo = ($3 => [$1, $2]); 
    } elsif($line =~ /^\s*layer_def\s+(\S+)\s+(\S+)\s*;/gi) { 
    $cdnsInt{$2}=$1; 
    } 
} 

for (keys %layerInfo) { 
    for my $tmp (keys %cdnsInt) { 
    if ($_ eq $tmp) { 
     push @{ $outHash{values %cdnsInt} }, (values %layerInfo); 
    } 
    } 
} 

请问有人可以帮我解决这个问题吗?

非常感谢。

问候, Divesh

回答

1

这从头重置您的哈希值的每一行:

%layerInfo = ($3 => [$1, $2]); 

尝试,而不是:

$layerInfo{$3}= [ $1, $2 ] ; 

更重要的是,如果你想获得更接近最终结果与layerInfo分配相同:

$outHash{cdnsInt{$3}}= [ $1, $2 ] ; 

这可以让你:

$outHash = { 
      'A1' => [ 
        '2', 
        '2' 
        ], 
      'A2' => [ 
        '3', 
        '2' 
        ] 
     }; 
+0

非常感谢woolstar。我如何从outHash中检索值? – user3093942

+0

'$ outHash {'A1'} [0]'&'$ outHash {'A1'} [1]' – woolstar