use v5.12; use warnings; use Data::Dump qw/pp dd/; my $txt = <<'___'; cat dog cat mouse eel cat housecat catamaran fish ___ say 'm-pos:', pos($txt) while $txt =~ m/cat/g; my $cnt=1; while ($txt =~ s(cat)($cnt)x) { say "s-pos:", pos($txt) // "undefined"; $cnt++; } say $txt; #### m-pos:3 m-pos:11 m-pos:25 m-pos:34 m-pos:38 s-pos:undefined s-pos:undefined s-pos:undefined s-pos:undefined s-pos:undefined 1 dog 2 mouse eel 3 house4 5amaran fish