in reply to multiple matching in arrays

When worried about duplicates, use a hash. It's only a slight change to your code.
foreach my $found (@array2) { if (&match_names($item,$found)) { print "found a match ($item = $found\n"; $found_one{$found} = 1; # *** changed line } # end-if } # end-foreach } # end-foreach @save = keys %found_one;
This will give you one each of the matches. They wont be in the same order as they were found, however. If that's important, then you have to add
push(@save, $found) if !exists $found_one{$found}; $found_one{$found} = 1;
inside the loop, instead of doing keys() at the end to load up @save.

Also, as liverpole notes, you have a typo in the assignments for the sample arrays, where you use square brackets instead of parens. The way it's written the code won't work.