my @keys = qw( kittehs weather tailflic ); my $value = unravel_hash(\%meows, @keys ); sub unravel_keys { my $ref = shift; while (@_) { my $key = shift; return undef if ! exists $ref->{$key}; $ref = $ref->{$key}; } # Ran out of keys, so $ref is the requested value return $ref; }