2013-12-12 85 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