Текстовая информация хранится в Perl-программе в скалярных переменных. Поскольку Perl не накладывает искусственных ограничений на использование ресурсов компьютера, обычная практика в программах на Perl - считывание всего текста из файла вместе с разделителями строк в одну скалярную переменную, чтобы затем эффективно обработать его. Поэтому в Perl переменные, содержащие символьные данные, называют "строковыми" лишь для краткости, чтобы не говорить "скалярная переменная, содержащая строковое значение".
Уже известные из лекции 2 строковые литералы, заключаемые в апострофы и двойные кавычки, могут записываться в альтернативной форме:
'строка в апострофах' или q(строка в апострофах)
"строка в кавычках" или qq(строка в кавычках)
Подобно литеральному списку слов qw(), упомянутому в лекции лекции 5, строковые литералы в этом формате могут ограничиваться разными скобками и практически любыми парными символами: (), {}, [] , <>, //, \\, !! и так далее. Конечно, применение в качестве ограничителей строк таких символов, как &&, ||, %%, ##, '' или $$, допустимо, но не рекомендуется, поскольку может ввести в заблуждение читателя программы. Правила интерполяции действуют и на эту форму записи строковых литералов.
В Perl есть особенные строки, очень похожие на литералы: это строки, заключенные в обратные апострофы (back-quotes, backticks) ``, для которых также есть эквивалентная запись в виде qx(). Особенность таких строк заключается в том, что их содержимое рассматривается как синхронный вызов внешней программы или команды операционной системы, которая выполняется во время работы Perl-программы. Фактически это операция выполнения программы. Результат выполнения указанной внешней программы становится значением конструкции qx(). При этом в ней производится интерполяция. Так, например, в среде MS Windows или Linux с помощью команды dir можно получить список MP3-файлов и поместить его в переменную:
$music_files = `dir *.mp3`; # или qx(dir \*.mp3)
Таким же образом можно легко воспользоваться услугами любой другой программы. Недаром Perl часто называют "склеивающим языком" (glue language): с помощью Perl-программы можно обращаться к имеющимся программам, получать результат их выполнения и обрабатывать его по усмотрению программиста. Так, упомянутый в лекции 1 прием использования программ-фильтров получил в Perl дальнейшее развитие. Другие примеры использования операции выполнения программы приведены в лекции 16.
Встречается еще один тип строковых литералов, называемых V-строки ("V-strings" - строки версий), хотя он считается устаревшим и может не поддерживаться в будущем.
v1.20.300.4000 # то же, что "\x{1}\x{14}\x{12c}\x{fa0}"
v9786 # "смайлик" ? (символ Unicode \x{263A})
v79.107.33 # строка 'Ok!'
79.107.33 # в литерале с несколькими точками можно без "v"
V-строки полезны для сравнения "номеров" версий с помощью операций строкового сравнения, например:
$version = v5.8.7;
print "Версия подходит\n" if $version ge v5.8.0;
V-строки иногда также применяются для записи сетевых адресов IPv4, например: v127.0.0.1.
Кроме escape-последовательностей, описанных в лекции 2, в Perl есть особые управляющие последовательности, предназначенные для преобразования символов в строковом литерале. Они приведены в таблице 7.1. С их помощью преобразуется либо один символ, следующий за escape-последовательностью, либо несколько символов до отменяющей последовательности.
Таблица 7.1. Преобразующие escape-последовательности
Управляющая последовательность | Мнемоника символа | Преобразование |
---|---|---|
\u | Upper case | преобразовать следующий символ к верхнему регистру |
\l | Lower case | преобразовать следующий символ к нижнему регистру |
\U | Upper case | преобразовать символы до \E к верхнему регистру |
\L | Lower case | преобразовать символы до \E к нижнему регистру |
\Q | Quote | отменить специальное значение символов вплоть до \E |
\E | End | завершить действие \U или \L или \Q |