$str =~ s/^\s*([^\s]?.*)$/$1/;
$str =~ s/^(.*[^\s])\s*$/$1/; # два regex работают быстрее, чем один более сложный
URL:
Обсуждается: http://www.opennet.me/tips/info/396.shtml
а так не работает?
s/^\ *// # удалит только пробелы
s/^\s*// # включая табуляцию и переход на новую строку
Описанный в совете пример работает быстрее для относительно больших строк.
s/^\s*//;$str =~ s/\s*$//; быстрее в случае небольших строк (примерно до 50 символов).
$str =~ s/^\s*(.*?)\s*$/$1/;' - наименее оптимальный вариант.$str =~ s/^\s*//;$str =~ s/^(.*[^\s])\s*$/$1/; - комбинированный вариант, очень неплохой результат.
тестировал так:
#!/usr/bin/perl
use strict;
use Benchmark;timethese(100000,
{
test1 => 'my $str=" test "; $str =~ s/^\s*([^\s]?.*)$/$1/;$str =~ s/^(.*[^\s])\s*$/$1/;',
test2 => 'my $str=" test "; $str =~ s/^\s*//;$str =~ s/\s*$//;',
test3 => 'my $str=" test "; $str =~ s/^\s*(.*?)\s*$/$1/;',
test4 => 'my $str=" test "; $str =~ s/^\s*//;$str =~ s/^(.*[^\s])\s*$/$1/;'
}
);
пользуюсь s/^[\s\t]+/g
Не знаю на сколько быстрее/медленнее, но понятнее и не громоздко.
> пользуюсь s/^[\s\t]+/gа g в конце зачем ? :)
Метасимвол \s по-хорошему включает в себя \t.