my $matched=0; foreach my $id (keys %manager){ foreach my $manager (keys %{$manager{$id}}){ for my $i (0..$#{$manager{$id}{$manager}{'members'}}){ my $index=0; foreach my $emp (@found){ if ($emp->{'ID'}=~/$manager{$id}{$manager}{'members'}[$i]/i){ splice(@found, $index, 1); print $emp->{'Name'} . "\n"; $matched++;} $index++;}}}} #### my $matched=0; my $index=0; foreach my $emp (@found){ DN: foreach my $id (keys %manager){ foreach my $mgr (keys %{$manager{$id}}){ for my $i(0..$#{$manager{$id}{$mgr}{'members'}}){ if ($emp->{'ID'}=~/$manager{$id}{$mgr}{'members'}[$i]/i){ print $emp->{'Name'} . "\n"; $matched++; splice(@found, $index, 1); --$index; last DN;}}}} $index++;} #### %hash= ( $email => { name => 'joe' id = > '123' }) #### foreach my $email (@array){ print $email->{'name'}; #ok print $email;} #error hash refs