В этой части Учебника 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, но, поскольку мы передали четвертый параметр, исходная строка была изменена.