use strict; use Data::Dumper; my $h = { a => 1, b => 2, c => { d => 3, e => { f => { g => 4, h => 5, }, }, }, }; my $match; my $find = 'g'; find_me($h); print "$match\n"; sub find_me { my ($k,$v,@rest) = %{shift()}; # merlyn code ;) $match = $v if $k eq $find; find_me({@rest}) if @rest; find_me($v) if ref $v eq 'HASH'; }