my $hash = { key => "value" } ; foreach( keys %{ $myHash } } { doSomething( \key $myHash->{$_} ) ; # or maybe without \ } sub doSomething { print "key = " . key $_[0] . "\n" ; print( ( value $_[0] ) . "\n" ) ; print( ( hash $_[0] )->{key $_[0]} . "\n" ) ; } __END__ key = key value value #### my $hash = { key1 => key $hash->{key1} } ; print key $hash->{ key1 } ; __END__ key1 #### my $hash = { key1 => "" } ; print key $hash->{ key1 } ; __END__ Not a key value pair reference at line 2 #### my $hash = { key1 => { key2 => \key $hash->{key1} } } ; print key $hash->{ key1 }->{ key2 } ; __END__ key1 #### my $key = "key1" ; my $hash = { \$key => ...} ; print $key . "\n" ; print ( key $key ) . "\n" ; __END__ KEY0x83412523 key1 #### my $key = "key1" ; my $hash = { \$key => "value" } ; print( ( hash $key )->{ key1 } . "\n" ) ; print( value $key ) ; __END__ value value