Perl替换多维哈希引用中的值

时间:2013-04-27 21:28:56

标签: 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 个答案:

答案 0 :(得分:2)

你的问题很不清楚。

您似乎正在使用Data::Dumper,这是一个很好的工具。转储两个哈希的结构,希望事情变得更加清晰。

无论你做什么,你的输出(什么?)告诉我们你使用哈希引用作为哈希键。散列键总是字符串,因此您用作散列键的所有标量变为字符串,而像HASH(0xaa5fdc8)这样的字符串就是您在perl中将hashref强制转换为字符串时所获得的字符串。

答案 1 :(得分:1)

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

应该是您的选择

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

$default_parameters->{$def_key}

(我使用后者与返回each的{​​{1}}保持一致。)