use Data::Dumper; my @arA = qw( lion tiger dog cat snake); my @arB = qw( tiger dragon lion); my @arC = qw(dog phoenix); my %all; @all{@arA} = (); for (@arB) { next unless exists $all{$_}; push @{$all{$_}}, "$_ - from array B"; } for (@arC) { next unless exists $all{$_}; push @{$all{$_}}, "$_ - from array C"; } print Dumper \%all;