note
repellent
<c>
use Test::More;
sub trim { my $s = $_[0]; $s =~ s/^\s+(\S?.*\S)\s+$/$1/s; $s }
is( trim(' '), '' );
is( trim('a '), 'a' );
is( trim(' a'), 'a' );
is( trim(' a '), 'a' );
is( trim('ab '), 'ab' );
is( trim(' ab'), 'ab' );
is( trim(' ab '), 'ab' );
is( trim('a bb c '), 'a bb c' );
is( trim(' a bb c'), 'a bb c' );
is( trim(' a bb c '), 'a bb c' );
done_testing();
__END__
not ok 1
# Failed test at ./t.pl line 12.
# got: ' '
# expected: ''
not ok 2
# Failed test at ./t.pl line 13.
# got: 'a '
# expected: 'a'
not ok 3
# Failed test at ./t.pl line 14.
# got: ' a'
# expected: 'a'
ok 4
not ok 5
# Failed test at ./t.pl line 16.
# got: 'ab '
# expected: 'ab'
not ok 6
# Failed test at ./t.pl line 17.
# got: ' ab'
# expected: 'ab'
ok 7
not ok 8
# Failed test at ./t.pl line 19.
# got: 'a bb c '
# expected: 'a bb c'
not ok 9
# Failed test at ./t.pl line 20.
# got: ' a bb c'
# expected: 'a bb c'
ok 10
1..10
# Looks like you failed 7 tests of 10.
</c>
<br>
The one I could find with best benchmark and passes tests is <c>s/^\s*((?:.*\S)?)\s*$/$1/s;</c>, which is essentially like <c>MRE_regx</c> with <c>+</c> replaced with <c>*</c> (perhaps [trizen] typo-ed?)
2258
950720