use strict; use warnings; use Data::Dumper; my @arA = qw(lion tiger dog cat snake); my @arB = qw(tiger dragon lion); my @arC = qw(dog phoenix); my @arD = qw(lion wolf mouse); my %all; my %arrays = (b => \@arB, c => \@arC, d => \@arD); my %aElts; @aElts{@arA} = (1) x @arA; for my $array (keys %arrays) { for my $elt (@{$arrays{$array}}) { next unless $aElts{$elt}; push @{$all{$elt}}, "from Array $array"; } } print Dumper \%all;