Имена переменных могут содержать любые буквенно-цифровые символы за исключением пробела и табуляции. Большие и малые буквы различаются. В Perl по умолчанию имена меток и указателей файлов пишут большими буквами.
Скалярные значения. Имена скаляров всегда начинаются с символа '$'. Скалярные переменные могут содержать числа, строки и ссылки. Преобразование числа - строки происходит автоматически по умолчанию. В Perl не существует типов. Это контекстно зависимый полиморфный язык для работы с текстами. Скаляр имеет логическое значение "TRUE" (истина), если это не нулевая строка или число не равное 0.
Конструкторы скаляров. Числа пишутся стандартно:
123 123.123 0.12.12E-10 0xABCD 0377 123_456_123
Строки ограничиваются одинарными (') или двойными (") кавычками:
'Равняйсь, смирно!' "Построимся и спасемся."
Запрещается в кавычках применять зарезервированные литералы: __LINE__, __FILE__,__END__.
$var1 # Простой скаляр 'var1'
Массивы. При использовании имени массива "целиком" или его "среза" перед именем м-а ставится символ '@'. Элементы массивов индексируются целыми числами, первый элемент - нулевой. Отрицательное значение индекса обозначает номер позиции элемента с конца.
Массивы конструируются следующим образом:
@array1=(1,2,3,4,5); @array1=(1..20);@array2=(30,40,@array1); # Добавление к @array2 всех элементов @array1@array3=($perem1,$perem2,$perem3);Обращение к нескольким элементам массива осуществляется так:
@var1 #Все элементы массива var1 ($var1[0],..., $var1[n])
@var1[1,3,10] # Элементы $var1[1], $var1[3], $var1[10]
@array1[2,10,20]=(20,3,4); # Замена элементов под номерами 2 10 и 20 числами 20 3 и 4@array1[20,1]=@array1[1,20] # Меняет элементы местамиОбращаться к отдельному элементу массива (скаляру) можно в форме $имя_массива[индекс].
$var1[0] # Первый элемент массива 'var1'
|
Для массивов существуют также такие функции как push(), pop(), shift(), unshift().
push(@array1,$perem1); # Добавляет $perem1 в конец @arrayunshift(@array,$perem1); # Добавляет $perem1 в начало @array$perem1=pop(@array1); # Присваивает $perem1 последнему элементу массива @array$perem1=shift(@array); # Тоже самое с первым элементом$#var1 - это индекс последнего элемента массива. Количество элементов определяется как $#var1+1. Присвоение значения $#var1 изменит длину массива и разрушит "оставленные" значения. Присвоение значения элементу массива с индексом больше чем $#var1 увеличит размер массива, а присвоение ему нулевого списка - обнулит.
Хэш - ассоциативные массивы скаляров, состоящие из пар "Ключ-значение". Перед именем хэша ставится знак ‘%’. Хеши индексируются строками символов. Доступ к каждому значению записи осуществляется по ассоциированному с ним ключу.
Кострукция хэша выглядит следующим образом:
$hash{1}="key1"; $hash{'myset'}="www.rambler.ru"; $hash{1+2}=50;%hash(1,20,2,100); # Чётное кол-во элементов обязательно! Запись аналогична $hash{1}=20; $hash{2}=100;Доступ к отдельным элементам: $имя_хэша{выражение}.
%var, %key, %years #Хеш "целиком"
$var1{'first'} # Элемент с индексом 'first'
@var1{'first','last'} #то же что и ($var1{'first'}, $var1{'last'})
В хеше можно опускать кавычки, если индекс не содержит пробелов: $var1{first}; $var1{'first'}Удаление элементов из хэша производится с помощью операции delete:
delete($hash{1});Выделить отдельные ключи и значения хэша можно при помощи функций keys() и values() соответственно:
%hash(1,20,2,100,3,'test');@key=keys(%hash); # @key=(1,2,3);@value=values(%hash) # @value=(20,100,'test');
Каждый тип переменных имеет свою область памяти поэтому $var1 и $var1[0] совершенно разные переменные, хотя $var1[0] часть массива @var1. Так же @var1 и %var1 - разные массивы переменных.
|
Список - множество значений, перечисленных через запятую и заключенных в круглые скобки: @var1 = (1, 2, 'привет', 1.2);
Можно применять в списке другие списки, но в полученном списке невозможно различить начало и конец включенных списков.
@s1 = (1, 2, 3); @s2 = (6, 7, 8);
@s = (0, @s1, 4, 5, @s2, 9, 10);
print @s; #Рез-т: 012345678910
Список без элементов обозначается, как (), и называется нуль-списком. Списковое выражение можно употреблять как имя массива: print ('январь','февраль','март')[1]; Результат: февраль
Список может быть присвоен списку, если каждый элемент в списке слева допустим по типу списку в правой части. ($a, $b, $c) = (1, 2, 3); print $a, $b, $c;
В случае присваивания списка хешу, список рассматривается как пары: ключ-значение.
%дни_месяца = ('январь', 31, 'февраль', 30);Результат: $дни_месяца{январь} = 31, $дни_месяца{февраль} = 30
Для удобства записи можно использовать выражение с =>.
%дни_месяца = (январь => 31, февраль => 30,);
Контекст. В Perl имеется два главных контекста: скалярный и список (list). Если в левой части выражения имеется ввиду одно единственное значение, то это скалярный контекст. Если множество значений - то список.
$var1 = <>; # Прочитать одну строку файла
@var1 = <>; # Прочитать все строки файла
В скалярном контексте имя массива возвращает его длину.
В скалярном контексте список возвращает последний элемент списка.
$var1 = (1,2,3); # $var1 = 3 – послед эл-т списка
@var1 = (4, 3, 2, 1);
$i = @var1;
print $i;# Результат 4
Для принудительного получения скалярного значения есть функция scalar(): print scalar(@var1);
Хеш в скалярном контексте возвращает "true", если существует хотя бы одна пара "ключ-значение".
Присваивание списков в скалярном контексте возвращает количество присвоенных элементов.