Although the simplest approach would seem to be
$string =~ s/^\s*(.*?)\s*$/$1/;not only is this unnecessarily slow and destructive, it also fails with embedded newlines. It is much faster to do this operation in two steps:
$string =~ s/^\s+//; $string =~ s/\s+$//;Or more nicely written as:
for ($string) { s/^\s+//; s/\s+$//; }This idiom takes advantage of the foreach loop's aliasing behavior to factor out common code. You can do this on several strings at once, or arrays, or even the values of a hash if you use a slice:
# trim whitespace in the scalar, the array, # and all the values in the hash foreach ($scalar, @array, @hash{keys %hash}) { s/^\s+//; s/\s+$//; }