my %z=(aa=>{bb=>{cc=>44}});; sub chk{ my ($v,$h)=@_; return 1 unless @$h; return 0 unless exists $v->{my $x=shift @$h}; return chk($v->{$x},$h) } print qq[found\n] if chk(\%z,[qw(aa bb cc)]);