my $cursor = \%foo; for(qw(foo bar)) { undef $cursor, last unless exists $cursor->{$_}; $cursor = $cursor->{$_}; } print "exists\n" if $cursor; #### sub exists_novivify { my $cursor = shift; for(@_) { undef $cursor, last unless exists $cursor->{$_}; $cursor = $cursor->{$_}; } $cursor; } print "exists\n" if exists_novivify \%foo, qw(bar baz);