Глава 2: Скалярные данные.
2.1 Что такое скалярные данные
2.1.2 Строки
Строки — это последовательности символов (например, hello). Каждый символ представляет собой 8-битовое значение из 256-символьного набора (при этом символ NUL ничего особенного, как в некоторых языках, собой не представляет).
Самая короткая из возможных строк не содержит ни одного символа. Самая длинная строка заполняет всю наличную память (но сделать с ней что-либо вы вряд ли сможете). Это соответствует принципу "отсутствия встроенных ограничений", которому Perl следует при каждой возможности. Обычно строки представляют собой последовательности букв, цифр и знаков препинания, коды которых лежат в диапазоне ASCII 32 — 126. Однако возможность наличия в строке любого символа с кодом от 0 до 255 означает, что вы можете создавать, просматривать необработанные двоичные данные и манипулировать ими как строками — то, что вызвало бы серьезные трудности в большинстве других языков. (Например, можно "залатать" свою операционную систему, прочитав нужный фрагмент кода как Perl-строку, внеся изменение и записав результат обратно на диск.)
Как и числа, строки могут иметь литеральное представление (способ представления строкового значения в Perl-программе). Литеральные строки бывают двух видов: в одинарных кавычках и в двойных кавычках*. Есть еще одна похожая форма: строка в обратных кавычках ('вот такая'). Это не столько литеральная строка, сколько способ выполнения внешних команд и получения их результатов. Более подробно этот вопрос рассматривается в главе 14.
* Есть также here -строки, похожие на here-локу менты shell. Они рассматриваются в главе 19, Программирование CGI. См. также главу 2 книги Programming Реrl man-страницу pcrldata( I).
Строки в одинарных кавычках
Строка в одинарных кавычках представляет собой последовательность символов, заключенную в одинарные кавычки. Одинарные кавычки частью самой строки не являются, они служат лишь для того, чтобы Perl мог определить начало и окончание строки. Все символы, стоящие между кавычками (в том числе символы новой строки, если строка разбивается на несколько экранных строк), действительны внутри строки. Два исключения:
чтобы вставить одинарную кавычку в строку, уже заключенную в одинарные кавычки, поставьте перед ней обратную косую черту.
Для того чтобы вставить в строку в одинарных кавычках обратную косую, поставьте перед ней еще одну обратную косую черту.
Примеры:
'hello' # пять символов: h, e, l, l, о
'don\'t' # пять символов: d, о, n, одинарная кавычка, t
'' # пустая строка (без символов)
'silly\\me' # silly, обратная косая, mе
'hello\n' # hello, обратная косая, n
'hello
there' # hello, новая строка, there (всего 11 символов)
Отметим, что пара символов \п внутри строки в одинарных кавычках интерпретируется не как символ новой строки, а как два символа: обратная косая и п. (Обратная косая имеет специальное значение только в том случае, если за ней следует еще одна обратная косая или одинарная кавычка.)
Строки в двойных кавычках
Строка в двойных кавычках действует почти так же, как С-строка. Это тоже последовательность символов, но на этот раз — заключенная в двойные кавычки. Теперь, однако, обратная косая приобретает полную силу и может задавать определенные управляющие символы и вообще любой символ в восьмеричном и шестнадцатеричном форматах. Вот некоторые строки в двойных кавычках:
"hello world\n" # hello world и новая строка
"new \177" # new, пробел и символ удаления (восьмеричное 177)
"coke\tsprite" # coke, знак табуляции, sprite
Широко используются сочетания обратной косой черты с различными символами (так называемая управляющая последовательность с обратной косой). Полный перечень управляющих последовательностей, которые применяются в строках в двойных кавычках, приведен в табл. 2.1.
Таблица 2.1. Управляющие последовательности
Конструкция
Значение
\n
Переход на новую строку (Newline)
\r
Возврат к началу строки (Return)
\t
Табуляция
\f
Переход к новой странице (Formfeed)
\b
Возврат на предыдущую позицию с удалением символа (Backspace)
\а
Сигнал
\е
Escape
\007
Восьмеричное ASCII-значение (в данном случае 07 = сигнал)
\x7f
Шестнадцатеричное ASCII-значение (в данном случае 7f = удалить)
\сС
Управляющий символ (здесь Ctri+C)
\\
Обратная косая
\"
Двойная кавычка
\1
Перевод следующей буквы в нижний регистр
\L
Перевод в нижний регистр всех последующих букв до \е
\U
Перевод в верхний регистр следующей буквы
\U
Перевод в верхний регистр всех следующих букв до \Е
\Q
Заключить в обратные косые все небуквенные и все нецифровые символы до \Е
\E
Отменить действие последовательности \L, \u или \Q
Еще одна особенность строк в двойных кавычках состоит в том, что в них производится интерполяция переменных, т.е. при использовании строки все скалярные переменные и переменные-массивы в ней заменяются их текущими значениями. Мы, однако, формально еще не знакомы с тем, что такое переменная (за исключением краткого обзора, данного в главе 1), поэтому мы вернемся к этому вопросу позднее.