我在替换多维数据哈希引用中的值时遇到了一些困难。
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'
答案 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}}保持一致。)