%hash = ( foo => 'bar', bar => sub { 'foo' } ); (ref() eq 'CODE') && $_ = \$hash{ $_->() } for values %hash; #### %hash = ( foo => 'bar', bar => [ 'foo' ] ); (ref() eq 'ARRAY') && $_ = \$hash{ $_->[0] } for values %hash; #### %hash = ( foo => 'bar', bar => 'REF:foo' ); /^REF:(.+)/ and $_ = \$hash{$1} for values %hash; #### %hash = (); for ( [ foo => 'bar' ], [ bar => \$hash{foo} ] ) { $hash{ $_->[0] } = $_->[1]; } #### %hash = (); %temp = ( foo => 'bar', bar => \$hash{foo} ); $hash{$_} = $temp{$_} for keys %temp;