use strict; use warnings; my %meows = ( kittehs => { purr => "happy", hiss => "mad", weather => { tailflic => "rain", shaking => "a doosy", }, }, ) sub func { my $h_ref = shift; my $cur = $h_ref; for my $k (@_) { $cur = $cur->{$k} } return $cur; } print $meows{"kittehs"}->{weather}->{tailflic}, "\n"; print func( \%meows, "kittehs", "weather", "tailflic"), "\n"; __END__ rain rain