К вашему сведению: равенство строк в Perl проверяется оператором eq.
A. Rex
5
Небольшое разъяснение по всем полученным вами ответам: s/^\s+|\s+$//g;vs s/^\s*//; s/\s*$//;Последний - ( хоть и немного) более идиоматический способ сделать это, поскольку запуск механизма регулярных выражений в этом случае на самом деле быстрее, чем чередование. Вы можете прочитать больше об этом в книге Джеффри Фридла «Освоение регулярных выражений». (Если это не было исправлено в какой-либо более новой версии Perl, и в этом случае кто-нибудь, пожалуйста, поправьте меня!)
Hugmeir
4
Исходя из опыта Java и .NET, я почти шокирован, что это не встроено в язык! СПАСИБО ВСЕМ!
Landon Kuhn
3
@ landon9720, это в некотором роде: Scalar :: Util имеет обрезку и является ядром с 5.7.3 - это 2002 год!
@ mklement0 и никогда не будет. Но это не актуально, так как все должны использовать модули из CPAN.
Ether
2
зачем всем использовать модули от CPAN? Это затрудняет согласованность при использовании perl из вашего дистрибутива Linux (debian, redhat, ubuntu) в сочетании с вручную установленными модулями CPAN. Гораздо лучше, если что-то можно будет сделать в Perl с использованием модулей, которые доступны в виде пакетов в дистрибутиве Linux
Marki555
Модули @ Marki555, доступные в виде пакетов в вашем дистрибутиве linux, взяты из CPAN - они только что были переупакованы. Как правило, вы можете запросить упаковку определенного модуля, если это еще не было сделано (сотрудники debian особенно отзывчивы и полезны).
Ether
1
Я знаю, что они также из CPAN ... Да, обычно я могу запросить новый pkg для debian, но это не поможет мне для моей установленной стабильной версии debian ... вот почему я предпочитаю модули пакетов, но использую напрямую CPAN, если действительно необходимо.
Marki555
4
@Ether При всем уважении, мне очень приятно знать, что это неосновной модуль. В этом посте говорится об использовании модуля вместо довольно простого однострочного регулярного выражения. Если модуль является основным, я был бы гораздо более открытым для него. Это актуально и в данном случае.
UncleCarl 01
26
Встроенной trimфункции нет, но вы можете легко реализовать свою, используя простую замену:
eq
.s/^\s+|\s+$//g;
vss/^\s*//; s/\s*$//;
Последний - ( хоть и немного) более идиоматический способ сделать это, поскольку запуск механизма регулярных выражений в этом случае на самом деле быстрее, чем чередование. Вы можете прочитать больше об этом в книге Джеффри Фридла «Освоение регулярных выражений». (Если это не было исправлено в какой-либо более новой версии Perl, и в этом случае кто-нибудь, пожалуйста, поправьте меня!)Ответы:
Вот один из подходов с использованием регулярного выражения:
$string =~ s/^\s+|\s+$//g ; # remove both leading and trailing whitespace
Perl 6 будет включать функцию обрезки:
Источник: Википедия
источник
Это доступно в String :: Util с помощью
trim
метода:Примечание редактора:
String::Util
это не основной модуль, но вы можете установить его из CPAN с помощью[sudo] cpan String::Util
.use String::Util 'trim'; my $str = " hello "; $str = trim($str); print "string is now: '$str'\n";
печатает:
Однако сделать это достаточно просто:
$str =~ s/^\s+//; $str =~ s/\s+$//;
источник
Встроенной
trim
функции нет, но вы можете легко реализовать свою, используя простую замену:sub trim { (my $s = $_[0]) =~ s/^\s+|\s+$//g; return $s; }
или с помощью неразрушающей замены в Perl 5.14 и новее:
sub trim { return $_[0] =~ s/^\s+|\s+$//rg; }
источник
Согласно этой ветке perlmonk :
$string =~ s/^\s+|\s+$//g;
источник
Полное руководство в perfaq здесь: http://learn.perl.org/faq/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning-end-of-a-string-
источник
Для тех, кто использует Text :: CSV, я нашел этот поток, а затем заметил в модуле CSV, что вы можете отключить его с помощью переключателя:
$csv = Text::CSV->new({allow_whitespace => 1});
Логика обратная в том, что если вы хотите раздеться, вы устанавливаете значение 1. Пойдите и подумайте. Надеюсь, это кому-нибудь поможет.
источник
Один из вариантов - Text :: Trim :
use Text::Trim; print trim(" example ");
источник
Применить:
s/^\s*//; s/\s+$//;
к нему. Или используйте,s/^\s+|\s+$//g
если хотите нарядиться.источник
Я также использую позитивный взгляд вперед, чтобы обрезать повторяющиеся пробелы внутри текста:
s/^\s+|\s(?=\s)|\s+$//g
источник
Нет, но вы можете использовать
s///
оператор подстановки и\s
утверждение пробела, чтобы получить тот же результат.источник