use strict; use warnings; my %h=(a=>1,b=>2,c=>3); my @x=('a','c'); my $hr=\%h; my %g=%$hr{@x}; # plain old %g = %h{@x} also works my $gr = \%g; print $gr->{a} # prints "1" print $gr->{b} # prints "Use of uninitialized value in print" #### my %h=(a=>1,b=>2,c=>3); my @x=('a','c'); my $hr = \%h; my $gr = $hr->{@x}; print $gr->{a} #### my $gr = $hr{@x}; my $gr = $$hr->{@x}; my $gr = \%{$hr}{@x}