in reply to question about reg exp engine

Your first three regex do not need the modifier /g. You are using anchors, so the /g modifier is useless here. If you leave it out, the work will be done faster...

Your second regex (one whitespace at the end of line/string) is redundant, because it is already included in the third regex (one or more whitespace(s) at the end of line/string).

You really want to remove all whitespaces from the end of line, but only one from the beginning?

$string =~ s/^\S+//; # assumed to remove *all* whitespaces from the b +eginning $string =~ s/\S+$//; # assumed to remove *all* whitespaces from the e +nd $string =~ s/^\s+|\s+$//g; # /g needed here

Benchmark:

#!/usr/bin/perl # vi:ts=4 sw=4 et: use strict; use warnings; use Benchmark qw( cmpthese ); my $results = cmpthese( -3, { 'r2/g' => sub { my $string = ( ' ' x 1000 ) . 'x' . ( ' ' . 1000 ); $string =~ s/^\s+//g; $string =~ s/\s+$//g; }, 'r2' => sub { my $string = ( ' ' x 1000 ) . 'x' . ( ' ' . 1000 ); $string =~ s/^\s+//; $string =~ s/\s+$//; }, 'r1' => sub { my $string = ( ' ' x 1000 ) . 'x' . ( ' ' . 1000 ); $string =~ s/^\s+|\s+$//g; } } );

Result:

Rate r1 r2/g r2 r1 135605/s -- -19% -25% r2/g 168081/s 24% -- -7% r2 181494/s 34% 8% --

If your text in $string is multilined, you should check perlre for the /m modifier.

update: fixed typo.