2013-04-27 40 views
-3

我在替換多視圖散列引用中的值時遇到了一些困難。Perl在多視圖散列引用中替換值

while ( my ($module, $default_parameters) = each %{ $device_description_defaults }) { 
    while (my ($def_key, $def_value) = each %{ $default_parameters }) { 
     if ($def_key eq 'server') { 
      $device_description_defaults->{$default_parameters}->{$def_key} = $device_servers->{$def_value}->{ $hostname->{'device_cluster'} }; 
     } 
    } 
} 

結果的輸出:

 'HASH(0xaa5fdc8)' => { 
          'server' => [ 
              '10.1.1.1', 
              '10.1.1.2', 
             ] 
          }, 

'HASH(0xaa5fdc8)' 應該是 'some_specific_string'

回答

2

你提的問題是非常不清楚。

您似乎正在使用Data::Dumper,這是一個很好的工具。轉儲哈希結構和事情將有希望變得更加清晰。

不管你在做什麼,你的輸出(什麼?)告訴我們你使用了散列引用作爲散列鍵。哈希鍵總是字符串,因此所有用作哈希鍵的標量都變成了字符串,而像'HASH(0xaa5fdc8)'這樣的字符串恰恰是您在將哈希參數投射到perl中的字符串時所獲得的結果。

+0

你是對。我意識到我應該包括整個循環。在調試多一點後,用特定的值替換$ default_parameters,我已經縮小了這個問題的範圍。基本上$ default_parameters是一個HASH指針,但我將它作爲一個字符串來使用。 – evolution 2013-04-27 21:58:17

+0

用$模塊替換$ default_parameters有竅門。 $ default_parameters是一個哈希引用,$ module是一個字符串,我需要的 – evolution 2013-04-27 22:00:31

1
$device_description_defaults->{$default_parameters}->{$def_key} 

應該是你的

$device_description_defaults->{$module}->{$def_key} 

$default_parameters->{$def_key} 

選擇(我使用後者,使之與返回$def_keyeach一致。)