Переменные
Если обратится к
спецификации языка
Perl
(http://www.perl.org)
, то
можно дать точное и полное определение переменных. Переменные относятся к структуре
данных языка
Perl, обозначаются
"$" (независимо от обращений
к составляющим какого-то нибыло массива) и являются скалярными величинами.
Язык
Perl поддерживает три типа данных:
-
Простые скаляры
- $простой_скаляр; $элемент_массива:
-
Массивы
- список (перечень) простых скаляров. Обозначения -
@
массив_скаляров
# $
простой_скаляр1,
$
простой_скаляр2......,
$
простой_скаляр n ;
-
Ассоциативные массивы (хеши)
- компилятору показывают символом
"процент"
(%)
. Создают ассоциацию одного и того же скаляра, размещенных
в разных местах кода, как одно "целое". Пример:
$info {'name'}
$info {'email'}
-value=>\%info #сохранить имя и адрес электронной почты.
Простые скаляры могут выражаться буквами и числами, но
концепция языка
PERL позволяет их не указывать, за счет обработки
операций самим компилятором. При использовании кавычек, следует
внимательно их применять в строках. Если нужно подставить
значение переменной, то заключите в двойные кавычки и если хотите
просто сослаться на имя скаляра - в одинарные. Пример:
$FORM='name';
PRINT "$FORM"; # выведет name
PRINT '$FORM'; # выведет FORM.
Элементы массивов, а они по сути являются теми же скалярами,
обозначаются так же и лишь дополнительно имеют индексацию в зависимости
от использования значений. Числовые заключаются в квадратные
скобки
([ ]). Отсчет от
"нуля" - первый элемент. Отрицательное
значение индексации определяет положение элемента с конца списка.
Пример:
$var[1] # второй элемент массива.
Буквенные индексы заключаются в
фигурные скобки плюс одинарные
кавычки для каждого индекса. Пример:
$day {'monday'} #'элемент с индексом 'monday'
Каждый тип данных имеет свои ячейки памяти. Так к примеру
использование разных переменных (
$day; $day[20];
$Day; @day; @day{'Fri'}; %day
и т. д.) занимают различные области памяти.
В именах переменных можно использовать любые символы,
кроме пробела и табуляции. Последние применяются в языке
Perl для разделения чего-либо.
При использовании в сценарии подпрограмм, если в коде
этого не видно, имена подпрограмм следует начинать со знака
"&". По такому же принципу, символом "*" (звёздочка), указываются
имена таблиц.
Скалярные значения
Скалярные переменные могут содержать различные простые
типы данных, такие как числа, строки или ссылки. Они не
могут содержать сложные типы, но могут содержать ссылку на массив или
хэш. В булевском контексте скаляр принимает значение
TRUE , если он содержит
не нулевое число или не пустую строку. В
Perl существует несколько способов
записи
чисел:
12345
12345.67
.23E-10
0xffff шестнадцатеричная запись
0377 восьмеричная запись.
1_234_567_890 подчерк для удобства чтения.
Скалярные значения для
строк могут принимать следующие:
\t табуляция
\n перевод строки
\r возврат каретки
\b пробел
\e символ Escape
\033 восьмеричный формат
\x1b шестнадцатеричный формат
\c[ управляющая
последовательность (control)
\a сигнал (alarm)
\f переход на следующую
страницу
Также в языке Perl имеют место два нулевых скаляра
defined (определенный) и
undefined
(неопределенный).
Последняя происходит вследствие какого-либо сбоя (ошибка,
объект на найден, неизвестная переменная и т. д.). Чтобы
предотвратить это нужно вводить в код
defined().
Любой
элемент массива, за счет увеличения его
длины, может стать
массивом
. Для этого в средствах
языка Perl предусмотрен интерпретатор "
$#
". По сути это индекс последнего элемента массива и прибавления
к нему дополнительных элементов увеличит его длину, а
присвоение ему значения
( ) - пустой массив или отрицательное
значение (при котором он будет пуст) - разрушит его.
Приведем пример:
@day = ('a','b','c');
$day[4] = 'd';
Теперь массив day содержит четыре элемента: ('a','b','c','d').
@day = (); или, что то же самое: $#day = -1;
Теперь массив day пуст.
Ассоциативные массивы
, при условии
существовании пары "ключ-значение", всегда имеет
значение "TRUE" (истина). Пара "ключ-значение" может
выражаться следующим образом:
\%map = ('silver',0x00f,'black',0x0f0,'purple',0xf00);
Для удобства принято использовать
между ключом и значением оператор
"=>". Пример:
%map = (
'silver' => 0x00f,
'black' => 0x0f0,
'purple' => )xf00
);
Обратите внимание на
круглые
скобки и что все перечислено
через
запятую. Именно так обозначаются любые списки.
Для принудительного получения скалярного значения
вводится функция
scalar( ). Пример:
print scalar(@имя_массива) # именно так выводится длина
массива, а не его значение.
Контекст
Большое значение для правильного употребления встроенных
функций имеет контекст использования результата этих функций, т.к. в
противном случае они возвращают совершенно "непонятный" результат. В
Perl имеется два главных контекста: скалярный и список
(list). Проще
говоря, если в левой части выражения имеется ввиду одно единственное
значение, то это
скалярный контекст. Если множество значений -
список.
|