Perl. Скаляры, массивы и хеши.




Имена переменных могут содержать любые буквенно-цифровые символы за исключением пробела и табуляции. Большие и малые буквы различаются. В 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", если существует хотя бы одна пара "ключ-значение".

Присваивание списков в скалярном контексте возвращает количество присвоенных элементов.

$x = (($a, $b, $c) = (1,2)); # Результат $x=2


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: