На этом шаге мы опишем создание и использование скалярных переменных в
языке Perl.
Для удобства программирования языки высокого уровня используют переменные, с помощью которых программист может ссылаться на данные, расположенные в памяти, или изменять их содержание. Переменная задается своим именем, которое используется программой для обращения к области памяти и извлечения хранящихся в ней данных или, наоборот, записи данных в область памяти. Обычно говорят, что в переменных хранятся данные.
Переменная определяет тип данных, хранимых в области памяти, на которую она ссылается. В большинстве языков программирования переменные до их использования в программе объявляются как переменные определенного типа, информируя транслятор, что в них можно хранить данные соответствующего типа. В языке Perl нет операторов объявления переменных определенного типа; они автоматически объявляются при первом их использовании в конструкциях языка, например в операторе присваивания значения переменной. Любая переменная определяется заданием своего имени, которое представляет собой правильный идентификатор языка.
В Perl имя любой переменной состоит из специального символа (префикса), определяющего тип переменной, за которым следует идентификатор. Для переменных скалярного типа или просто скалярных переменных, таким определяющим символом является знак доллара "$".
Приведем примеры правильного и неправильного задания имен скалярных переменных:
# Правильные имена скалярных переменных. $Name; $name_surname; $name_l; # Неправильные имена скалярных переменных. $l_name; # Идентификатор не может начинаться с цифры. $Name@Surname; # Недопустимый символ @.
Скалярная переменная может хранить только одно скалярное данное: числовое или строковое, причем не существует никакого способа определить, какой именно тип скалярных данных в ней содержится. Дело в том, что при использовании этих переменных в различных операциях хранимые в них данные автоматически преобразуются из одного типа в другой, т. е. в арифметических операциях строка преобразуется в число, а в строковых операциях числовое значение преобразуется в строковое. Преобразование строки в числовое значение осуществляется, если она содержит последовательность символов, которая интерпретируется как число, иначе интерпретатор генерирует ошибку. Шестнадцатеричные числа с префиксом "0x" и десятичные числа с символом подчеркивания для отделения триад в целой части числа, заданные как строки, не преобразуются в числа, а последовательность цифр, начинающаяся с 0, не интерпретируется как восьмеричное число. Для преобразования строк, содержащих представления шестнадцатеричных и восьмеричных чисел, в числовые значения следует пользоваться функцией oct.
Строки в двойных кавычках не только интерпретируют управляющие символы, но и позволяют подставлять значения скалярных переменных. Это означает, что в строке можно задать имя переменной, которое при вычислениях заменяется значением, содержащимся в переменной на момент вычислений. Например, следующая последовательность операторов:
$s = "150"; $n = "Книга стоит $s рублей."; print $n;
отобразит на экране монитора строку:
Книга стоит 150 рублей.
При подстановке переменной ее имя должно быть отделено разделителями от остальных символов строки, так как интрерпретатору нужно "знать": где заканчивается имя переменной. Перед именем переменной разделитель необязателен, так как интерпретатор, встретив символ "$" в строке, ограниченной двойными кавычками, начинает выделять правильный идентификатор.
Разделителями могут быть пробелы или управляющие последовательности. Можно и явно указать идентификатор переменной, задав его в фигурных скобках. Подобная техника демонстрируется следующим фрагментом программы:
$day = 'пятницу'; $number =5; $html = "HTML"; $s = "${html}-документ отослан в\n$day\t$number февраля."; print $s;
Результатом выполнения этого фрагмента будет отображение двух строк на экране монитора:
HTML-документ отослан в пятницу 5 февраля.
Переменная $html подставляется с явным указанием ее идентификатора, для выделения идентификаторов остальных переменных используются разделители.
Подставлять можно скалярные переменные, значения которых определены с помощью числовых и любых типов строковых литералов, причем строка в обратных кавычках интерпретируется как команда операционной системы.
Синтаксический анализатор языка Perl при анализе текста программы выделяет слова (не заключенная в кавычки последовательность алфавитно-цифровых символов) и определяет их принадлежность набору ключевых слов. Если слово не является ключевым, то интерпретатор рассматривает его как строку символов, заключенную в кавычки. Это позволяет задавать строковые литералы, не заключая их в кавычки:
$day = Friday; # Тождественно оператору $day = 'Friday';
Такие слова без кавычек в тексте программы иногда еще называют простыми словами (barewords).
На следующем шаге мы поговорим о массивах скаляров.