sub f { my($s,$t)=@_;$t?$$t{d}eq$s?$t:f($s,$$t{l})||f($s,$$t{r}):0 } #### $t = { d => 'd', l => { d => 'b', l => { d => 'a', l => 0, r => 0, }, r => { d => 'c', l => 0, r => 0, }, }, r => { d => 'f', l => { d => 'e', l => 0, r => 0, }, r => { d => 'g', l => 0, r => 0, }, } }; sub test { my $val = f(@_); print $val ? "$val->{d}:$val\n" : "$val\n"; } test('e',$t); test('O',$t);