my $str = 'abccabbcabc'; my %seen; while ($str =~ /(.)/g) { printf "character %s found at pos %d, reps %d\n", $1, pos($str), $seen{$1} if $seen{$1}++; }