trim в Perl

В некоторых языках программирования есть встроенная функция trim() которая позволяет убрать пробелы из начала и из конка строки. Например, если есть строка ' asdf ', то функция trim() сделает из нее строку 'asdf'. (слово "trim" можно перевести с английского языка как "подрезать")

В языке программирования Perl нет встроенной функции trim(), но убрать пробелы из начала и из конца строки можно и без нее. Вот пример Perl программы, которая убирает начальные и конечные пробелы из строки:

▶ Run
#!/usr/bin/perl

use utf8;
use strict;
use warnings;
use Data::Dumper;

my $str = ' asdf   ';

$str =~ s/^\s+|\s+$//g;

print Dumper $str;

Эта программа выведет на экран:

$VAR1 = 'asdf';

Как это работает

Для изменения строки используется регулярное выражение. Вот более простой пример регулярного выражения, которое изменяет строку: $str =~ s/BEFORE/AFTER/;:

  • $str — сначала указывается переменная к которой нужно применить регулярное выражение
  • =~ — этот оператор применяет регулярное выражение, которое указано справа от него к тому что указано слева
  • s/BEFORE/AFTER/ — это регулярное выражение замены s/, оно говорит что нужно заменить BEFORE на AFTER

В нашем примере регулярное выражение чуть сложнее: s/^\s+|\s+$//g; Тут говорится что все что соответствует ^\s+|\s+$ нужно заменить на пустую строчку. В конце регулярного выражения еще есть и модификатор /g, который говорит что не нужно останавливаться после первой замены, а нужно глобально заменить все совпадение в строке.

^\s+|\s+$. Тут есть следующие фрагменты:

  • ^ — означает начало строки
  • \s+ — означает один или больше пробельный символ (\s означает пробельный символ, а знак + означает один или больше)
  • | — означает логическое или
  • $ — означает конец строки

Т.е. ^\s+|\s+$ означает: все пробельные символы которые находятся в начале строки или все пробельные символы, которые находятся в конце строки. И эти найденные символы заменяются на пустую строку.

Символы

Регулярное выражение $str =~ s/^\s+|\s+$//g; убирает из переменной не только пробелы в начале и конце, а убирает все пробельные символы. Символ табуляции (\t), символ переноса на другую строку (\n), все это будет убрано. Вот пример на котором это видно:

▶ Run
#!/usr/bin/perl

use utf8;
use strict;
use warnings;
use Data::Dumper;

my $str = " \t \n asdf \n\n \t ";

$str =~ s/^\s+|\s+$//g;

print Dumper $str;

В Unicode есть много символов, которые означают пробелы. \s означает любой из этих символов.

Использование бибилиотек

Существуют специальные библиотеки которые позволяют убрать начальные и конечные пробелы из строки, например:

Но эти библиотеки не поставляются вместе с Perl, их нужно ставить дополнительно. Бывают ситуации что удобнее не использовать библиотеку, а самостоятельно написать код для убирания пробелов из начала и из конца строки.

Другие статьи