Себастьян Виллинг затронул в своем блоге вечную тему о том, как отрезать от строки пробелы с обеих сторон, сделав это в одно действие.
Вместо двух замен
$str =~ s/^\s+//;
$str =~ s/\s+$//;
Себастьян указывает на такой вариант:
$str =~ s/^\s*(.*?)\s*$/$1/;
Интересно почитать и комментарии, где предлагают несколько похожих вариантов с альтернативами в регулярном выражении:
$str =~ s/(^\s+|\s+$)//g;
$str =~ s/(?:^\s+|\s+$)//g;
$str =~ s/^\s*|\s*$//g;
$str =~ s/^\s+|\s+$//g;
P. S. В комментариях, кстати, видно, как почти одно и то же выражение разные люди записывают по-разному.
а самый правильный - этот
$str =~ s/^\s+|\s+$//g;
если есть 1 или более символов
другие варианты с \s* - не очень разумны т.к. от 0 до бесконечности и думаю сработают в больших числах медленней.
у себастьяна самый худший вариант - копирование с бекреференсом, память тратится зазря
Кстати вот:
Проба