my $last= ( " AB CDE FG HI JKL " =~ /( \w\w )/g )[-1]; print $last, $/; __END__ prints " FG " (not " HI ") #### my( $last )= " AB CDE FG HI JKL " =~ /.*(\w+)/sg; print $last, $/; __END__ prints "L" (not "JKL") #### my $string= " AB CDE FG HI JKL "; my $PATTERN= qr/(?! F)(?: \w+){1,3} /; # (match space-separated words where the first doesn't start with "F") my( $last )= $string =~ /.*($PATTERN)/sg; print $last, $/; $last= ( $string =~ /($PATTERN)/g )[-1]; print $last, $/; __END__ prints: JKL JKL never: HI JKL #### my $string= reverse " AB CDE FG HI JKL "; my $PATTERN= qr/(?: \w+){1,3}(?## my $string= " AB CDE FG HI JKL "; my $PATTERN= qr/(?! F)(?: \w+){1,3} /; # (match space-separated words where the first doesn't start with "F") my $last; my $end= -1; while( $string =~ /(?=($PATTERN))/g ) { my $stop= $+[-1]; if( $end < $stop ) { $last= $1; $end= $stop; } } print $last, $/; __END__ prints " HI JKL " !