-3

我在替换多维哈希引用中的值时遇到了一点困难。

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'

4

2 回答 2

2

你的问题很不清楚。

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

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

于 2013-04-27T21:55:29.450 回答
1
$device_description_defaults->{$default_parameters}->{$def_key}

应该是您的选择

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

或者

$default_parameters->{$def_key}

(我会使用后者与each返回的一致$def_key。)

于 2013-04-27T22:49:14.930 回答