use strict; use warnings; my $str = join '', ; my $i = 0; 1 while $str =~ s{ ^((?>\w+))(?!\d)(.*?) ^\1(?!\d) }{"$1$2$1" . ++$i}msxeg; print $str; __DATA__ George Fortran Jessi Heavens Bill Clinton Barack Obama Bill Gates Steve Jobs Bill Green George Bush