Обычно ограничителями строк мы считаем литералы, но в Perl это операторы выполняющие разного рода интерполяцию и поиск по шаблону. Вы можете сами задавать удобные для вас ограничители. В следующей таблице приведен полный перечень вариантов. Фигурные скобки '{}' обозначают любой символ, используемый для ограничителя. В случае использования скобок (круглых '()', квадратных '[]', фигурных '{}', угловых '<>') в начале ставится открывающаяся скобка, а в конце закрывающая.

По умолчанию Полное Функция Интерполяция
'' q{} Literal нет
"" qq{} Литерал да
`` qx{} Команда да

qw{} Список слов нет
// m{} Шаблон да

s{}{} Подстановка да

tr{}{} Трансляция нет

В строках допускающих интерполяцию имена переменных, начинающиеся с символов '$' или '@' - интерполируются, т.е. в строку вставляется значение строки или массива. Данные последовательности символов имеют специальное значение:

символ табуляции
символ новой строки
возврат
f перевод формата
v вертикальная табуляция
 backspace (забой)
a звонок
e escape
34 восьмеричный символ
x1a шестнадцатеричный символ
c[ символ управления
l нижний регистр следующего символа
u верхний регистр следующего символа
L нижний регистр для всех символов до E
U верхний регистр для всех символов до E
E ограничитель смены регистра
Q отмена действия метасимволов до E

Шаблоны интерполируются как регулярные выражения. Это выполняется вторым проходом после интерполяции переменных, поэтому в шаблоны можно вставлять переменные. Для отмены интерполяции используйте 'Q'. Если вы применяете вложенные ограничители, то внутренние ограничители работать не будут.

?PATERN?

Действие этого оператора аналогично /шаблон/, но выполняется до первого совпадения. Это удобно для поиска наличия какой-нибудь строки в одном или множестве файлов. Это не очень удачный оператор, поэтому в следующих версиях Perl его возможно не будет.

m/PATERN/gimosx
/PATERN/gimosx

Поиск в строке по патерну (шаблону). В скалярном контексте возвращает логическое значение true (1) или false (''). Если строка не указана с помощью операторов '=~' или '!~', поиск ведется в строке $_ Опции:

g - Глобальный поиск. Поиск всех вхождений.
i - Сравнение не зависит от регистра (верхний или нижний)
m - Строка многострочная.
o - однопроходная компиляция
s - однострочная строка
x - используются расширенные регулярные выражения.

Если '/' - ограничитель, то начальное 'm' можно опустить. С помощью него в качестве ограничителя может быть любой символ кроме пробела.

PATTERN может содержать переменные, которые будут интерполироваться (перекомпилироваться) каждый раз в момент вычисления. Переменные $) и $| не интерполируются. Если вы хотите, что бы такой шаблон интерполировался один раз - добавьте /o. Это необходимо делать в циклах поиска для увеличения быстродействия, однако, если вы измените значение переменной, Perl этого даже не заметит.

Если PATERN - нулевая строка, то используется последнее регулярное выражение.

В скалярном контексте возвращается список элементы которого - результаты выполнения выражений в скобках патерна ($1, $2, $3...). Обратите внимание что первый элемент $1.

Пример:

     $a = "/usr/local/perl/perl.bin"; 
	          # Анализируемая строка
Цель: Создать массив @dirs с именами директорий.
Решение: Самый простой способ воспользоваться split('/') но в качестве примера используем скобки.
     @dirs =~ m[/(w*)/(w*)/(w*)/(w*)]
Здесь 'm[' - использовать квадратные скобки как ограничители. (w*)- шаблон алфавитно-цифровой последовательности.
В результате @dirs равен ('usr', 'local', 'perl')

q/строка/
'строка'

Строка литералов. Не интерполируется. Внутри строки разрешается использовать ' или \ для обозначения символов ' и .

Пример:

     print q#Привет.#;     # Результат Привет.

     print 'O'K';          # O'K

qq/строка/
"строка"

Интерполируемая строка.

Пример:

     $var = 13;
     print "$var = $var";
Результат: $var = 13

qx/строка/
`строка`

Сначала строка интерполируется, а потом выполняется как системная команда.

Пример:

     print `date`;
Результат: Thu Nov 14 13:36:49 MSK 1996

qw/строка/

Возвращает список, элементы которого - слова строки, разделенные пробелами.

Пример:

     print qw/Построимся и спасемся!/; 
	   # ('Построимся','и','спасемся!')
Результат:
     Построимсяиспасемся!
Часто применяется как:
     use POSIX qw( setlocale localeconv )
     @EXPORT = qw( proc1 var );

s/шаблон/подстрока/egimosx

Поиск по шаблону и в случае успеха замена подстрокой. Возвращает количество произведенных подстановок, иначе false (0). Если строка в которой ведется поиск не указана (операторы =~ или != ), то используется переменная $_ . Если в качестве разделителя '/' использовать одинарную кавычку ('), то интерполяции не будет, иначе можно применять переменные в шаблоне или подстроке.

Опции:

e - Рассматривать правую часть как выражение.
g - Глобальный поиск.
i - Без различия регистра букв
m - многострочная переменная
o - компилировать шаблон один раз
s - однострочная переменная
x - расширенное регулярное выражение

Разделитель '/' можно заменить на любой алфавитно-цифровой символ кроме пробела.

Пример:

     $var = "12345"; # исходная строка
     $var =~ s/1/0/; # Заменить '1' на '0'.
	  Результат 02345
     $var =~ s(5)(.); # Заменить '5' на '.' 
	 Результат 0234.

Здесь в качестве разделителя применены скобки, поэтому подстрока взята в две скобки.

     $var =~ s/d*/каламбур/; Заменить все цифры. 
	 Результат 'каламбур.'

     $var =~ s/а/о/g; # Заменить все 'а' на 'о'. 
	 Результат 'коломбур.'

     $var = "12 34"; # Новое значение

     $var =~ s/(dd) (dd)/$2 $1/; # Поменять
	 местами числа. Результат '34 12'.

tr/таблица1/таблица2/cds
y/таблица1/таблица2/cds

Замена всех символов из "таблица1" на соответствующий символ из "таблица2". Результат - количество замен или стираний. Без оператора =~ или != операция выполняется со строкой $_. Для совместимости с программой sed вместо tr можно писать 'y'.

Опции:

c - дополнение "таблица1"
d - стереть найденные, но не замененные символы.
s - "сжать" повторяющиеся замененные символы.

Если указана опция /d таблица2 всегда интерпретируется как положено. Другими словами, если таблица2 короче, чем таблица1, то символ из таблицы1 интерпретируется всегда. Если таблица2 - null, то все символы строки остаются неизменными. Это удобно для подсчета количества символов в строке определенного класса или для сжатия повторяющихся символов, например, пробелов.

Пример:

     $s = "hello";     # Исходная строка

     $s =~ tr/a-z/A-Z/;     # Заменить малые буквы
	          на большие. Результат
                    # 'HELLO'

     $s = 'Hel....lo';
     $s =~ tr/a-zA-z/_/c;     # Заменить все 
	              не буквы на '_'
                    # Результат 'Hel____lo'
     $s =~ tr/_/ /s;          # Заменить '_'
	              на ' ' и сжать. 
                    # Результат 'Hel lo'
     $s =~ tr/a-zA-Z /a-zA-Z/d; # Удалить все 
	        не буквы. Результат 'Hello'

Если один и тот же символ несколько раз указан в таблице1, то применяется только первая замена.