use strict; use Data::Dumper; my @input = ("1 2 3", "5 5 6", "1 4 6" ); # outer map: take each input line # inner map: split it on white space and return it as a hash ref my @array = map { { map { $_ => 1 } split(/\s+/,$_) } } @input; print Dumper @array; my %unique; for (my $i=0; $i<=$#array; $i++) { foreach (keys %{$array[$i]}) { $unique{$_}->{'pos'}->{$i} = 1; $unique{$_}->{'count'}++; } } my @duplicates = grep { $unique{$_}->{'count'} > 1 } keys %unique; foreach (@duplicates) { print "DUP: $_ In lists: "; print join(",",keys %{$unique{$_}->{'pos'}}); print "\n"; }