Шаг 8.
Скалярные переменные в языке Perl

    На этом шаге мы опишем создание и использование скалярных переменных в языке 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).


    Замечание. Задание строковых литералов без кавычек возможно только для литералов, содержащих буквы латинского алфавита. Попытка использовать без кавычек литерады, содержащие буквы русского алфавита, приведет к ошибке компиляции.

    На следующем шаге мы поговорим о массивах скаляров.




Предыдущий шаг Содержание Следующий шаг