В этой части Учебника Perl мы узнаем о некоторых функциях Perl, предназначенных для работы со строками.
lc, uc, length
Существует несколько простых функций, таких как lc и uc, которые возвращают строку соответственно в нижнем и в верхнем регистре. Еще есть функция length, возвращающая количество символов в данной строке.
Взгляните на пример:
use strict;
use warnings;
use 5.010;
my $str = 'HeLlo';
say lc $str; # hello
say uc $str; # HELLO
say length $str; # 5
index
Еще одна функция - index. Она принимает две строки и возвращает положение второй строки внутри первой.
use strict;
use warnings;
use 5.010;
my $str = "The black cat jumped from the green tree";
say index $str, 'cat'; # 10
say index $str, 'dog'; # -1
say index $str, "The"; # 0
say index $str, "the"; # 26
Первый вызов index
вернул 10, потому что строка "cat" начинается на 10 символе. Второй
вызов index
вернул -1, указывая на то, что в этом предложении нет "dog".
Третий вызов показывает, что index
возвращает 0, когда вторая строка стоит в начале первой.
Четвертый пример показывает, что index
ищет точное совпадение, так что регистр влияет на ее
работу. Поэтому "the" и "The" - не одно и то же.
index()
ищет строки, а не слова, так что строку "e " тоже можно найти:
say index $str, "e "; # 2
index()
также может принимать третий параметр, указывающий на место, откуда начать поиск.
Так что, раз мы нашли "e " сначала на 2-м символе первой строки, можно попытаться поискать, начиная
с 3-его, чтобы узнать, не встречается ли в этой строке еще "e ":
say index $str, "e "; # 2
say index $str, "e ", 3; # 28
say index $str, "e", 3; # 18
Поиск "e" без пробела даст другой результат.
Наконец, существует еще одна функция под названием rindex (right index, правый индекс), которая начинает поиск с правого конца строки:
say rindex $str, "e"; # 39
say rindex $str, "e", 38; # 38
say rindex $str, "e", 37; # 33
substr
Наверное, самая интересная функция в этой статье это substr
. Это, по сути,
противоположность index(). Если index() говорит нам, где расположена данная строка, substr
возвращает подстроку, расположенную в данном месте. Как правило, substr
принимает 3
параметра. Первый - это строка. Второй - это положение (начиная с нуля), также называемое
смещение, и третий - длина строки, которую мы хотим получить.
use strict;
use warnings;
use 5.010;
my $str = "The black cat climbed the green tree";
say substr $str, 4, 5; # black
substr начинает отсчет с нуля, так что символ со смещением 4 это буква b.
say substr $str, 4, -11; # black cat climbed the
Третий параметр (длина) может быть и отрицательным числом. В этом случае он определяет количество символов с правого конца строки, которые НЕ будут включены. Таким образом, предыдущий код значит: отсчитать 4 символа от начала, 11 от конца, и вернуть то, что между ними.
say substr $str, 14; # climbed the green tree
Также можно опустить 3-й параметр (длину), что будет значить: вернуть все символы начиная от 14 и до конца строки.
say substr $str, -4; # tree
say substr $str, -4, 2; # tr
Мы можем использовать отрицательное число в качестве смещения, что будет значить: отсчитать 4
символа с конца и начать оттуда. То есть то же самое, что установить смещение
length($str)-4
.
Замена части строки.
Последний пример немного стремный.
Пока что substr
всегда возвращала подстроку и оставляла исходную строку нетронутой. В этом
примере возвращаемое значение будет определяться так же, но вдобавок будет изменено содержимое
исходной строки!
Возвращаемое значение substr()
всегда определяется первыми тремя параметрами, но в данном
случае мы передаем еще и четвертый. Это строка, которая заменит подстроку в исходной строке.
my $z = substr $str, 14, 7, "jumped from";
say $z; # climbed
say $str; # The black cat jumped from the green tree
Итак, substr $str, 14, 7, "jumped from"
возвращает словоclimbed, но, поскольку мы
передали четвертый параметр, исходная строка была изменена.