my $s = "#tag1 #tag2 #tag3 #tag1"; print qq{Original: $s\n}; my ($x, $d); map { ++$x->{$_}; $d->{$_}=$x->{$_} if $x->{$_} > 1 } split /\s+/, $s; printf qq{Uniq: %s\n}, join(' ', sort keys %$x); printf qq{Dupes found for: %s\n}, join(', ', sort keys %$d);