johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @strs = ( q{Mary had a little lamb}, q{ its fleece was white as snow}, ); my $nWords = 3; my $qrWordStart = qr{(?x) (?: (?<= \A ) | (?<= \W ) ) # Preceded by either beginning of # string or non-word character (?= \w ) # Followed by a word character }; foreach my $str ( @strs ) { my @posns; push @posns, pos $str while $str =~ m{$qrWordStart}g; say qq{->@{ [ substr $str, 0, $posns[ $nWords ] ] }<-}; }' ->Mary had a <- -> its fleece was <-