В Perl существует три типа структур данных: скаляры, массивы скаляров и хеши (hashes) - ассоциативные массивы скаляров. Обычно элементы массивов индексируются целыми числами, первый элемент - нулевой. Отрицательное значение индекса обозначает номер позиции элемента с конца. Хеши индексируются строками символов.
Имена скалярных переменных всегда начинаются с символа "$" даже когда обозначают элемент массива.
Пример:
$var1 # Простой скаляр "var1" $var1[0] # Первый элемент массива "var1" $var1{"first"} # Элемент с индексом "first"
В случае использования имени массива "целиком" или его "среза" перед именем массива ставится символ "@".
Пример:
@var1 # Все элементы массива var1 ( $var1[0], $var1[1], ... $var1[n]) @var1[1,3,10] # Элементы $var1[1], $var1[3], $var1[10] @var1{"first","last"} # то же что и ( $var1{"first"}, $var1{"last"} )
Хеш "целиком" начинается с символа "%".
Пример:
%var, %key, %years
Имена подпрограмм начинаются символом "&", если из контекста не видно, что это подпрограмма.
Пример:
&sub1, &test_prog, test(12)
Имена таблиц символов всегда начинаются символом "*".
Каждый тип переменных имеет свою область памяти поэтому $var1 и $var1[0] совершенно разные переменные, хотя $var1[0] часть массива @var1. Так же @var1 и %var1 - разные массивы переменных.
Имена переменных могут содержать любые буквенно-цифровые символы за исключением пробела и табуляции. Эти символы используются в качестве разделителей. Большие и малые буквы различаются поэтому $var1 и $Var1 - разные переменные. В Perl по умолчанию имена меток и указателей файлов пишут большими буквами.
Контекст.
Большое значение для правильного употребления встроенных функций имеет контекст использования результата этих функций, т.к. в противном случае они возвращают совершенно "непонятный" результат. В Perl имеется два главных контекста: скалярный и список (list). Проще говоря, если в левой части выражения имеется ввиду одно единственное значение, то это скалярный контекст. Если множество значений - список.
Пример:
$var1 = <>; # Прочитать одну строку файла @var1 = <>; # Прочитать все строки файла в массив @var1 $var1 = (1,2,3); # $var = 3 - количество элементов @var1 = (1,2,3); # Создание массива @var1 с элементами 1,2,3
1 2 3 4 5
8 8 8
| |