use Data::Dumper; my $a; sub x{ my $ar=$_[1]; my $v=shift @$ar or return $_[0]=undef; x($_[0]->{$v} , $ar) }; x($a,[5,3,4,5,6]); print Dumper \$a;