Массивы и списки. Прооцесс создания массива в Perl состоит в том, что переменной, обозначающей массив, присваивается список значений. В чем специфика этого списка в Perl? Значения заключаются в круглые скобки и разделяются запятыми. В следующем примере представлен список из четырех значений:
(23, 41, 92, 7)
Чтобы присвоить значения списка элементам массива, необходимо предварить имя массива знаком @. Значения присваиваются в том порядке, в котором они представлены в списке.
@mynums = (23, 41, 92, 7);
Когда массив готов, можно обращаться к его элементам по отдельности. Нумерация элементов массива начинается с 0, а не с 1. Массив mynums содержит четыре элемента, пронумерованных от 0 до 3. К элементам массива можно обращаться по индексу, который принято заключать в квадратные скобки. Индекс [0] соответствует первому элементу, а [2] — третьему. В следующем примере выводятся значения первого и четвертого элементов. Заметьте, что перед названием массива стоит символ $.
print $mynums[0] ;
print $mynums[2] ;
Любому элементу можно присвоить новое значение. Обратите внимание: перед отдельным элементом массива ставится знак $, а не @. Знак @ служит для обозначения всего массива в целом и употребляется в процессе присвоения ему списков значений. Знак $ следует рассматривать как обозначение конкретного элемента, который по сути является переменной.
$mynums[2] = 40;
Число элементов в массиве не ограничено. Для того чтобы добавить новый элемент, нужно просто присвоить ему значение. В результате выполнения следующей операции присваивания в массив mynums добавляется пятый элемент.
$myrmms [4] = 63;
С каждым массивом связана специальная переменная, обозначаемая следующим образом: # имя_массива. Значением этой переменной является текущее число элементов массива. Например, значение переменной #mynums — это число элементов в массиве mynums. В следующем примере задан вывод на экран количества элементов этого массива.
print "$#mynums";
Значения в списке, присваиваемые элементам массива, не обязательно должны иметь один тип. Это могут быть числа, строки и даже переменные. В этом случае элементы массива также будут разного типа (числовыми, строковыми и т. п.). В следующем примере элементам массива myvar присваиваются разнотипные значения.
@myvar = ("aleina", 11, 4.5, "a new car");
Для того чтобы команда оперировала всеми элементами массива, нужно указать имя массива с префиксом @. В следующем примере на экран выводятся все значения массива mynums:
print $mynums;
Символ @ употребляется вместо символа $, потому что массив не является простой переменной. Он содержит список значений, а в качестве переменных выступают отдельные элементы массива. Символ @ употребляется и во время присваивания значений одного массива другому. В следующем примере значения всех элементов массива mynums присваиваются соответствующим элементам массива newnums. Обратите внимание на то, что символ @ указан и перед именем массива mynums. Можно считать, что выражение @mynums преобразовывается в список значений массива mynums, после чего значения списка присваиваются элементам массива newnums.
@newnums = $mynums;
Список значений массива может использоваться в строке символов, как и значение переменной. В следующем примере значения элементов массива встраиваются в строку, которая затем присваивается переменной myreport. Заметьте: в качестве префикса в имени массива @mynums употребляется знак @.
$myreport = "Here are the numbers I have: @mynums \n";
print $myreport;
Переменные, выступающие в качестве элементов массива, обозначаются с помощью индекса и символа $. В следующем примере используется значение третьего элемента массива mynums:
$myelement= "This is the value of the third element: $mynums[2] \n";
print $myelement;
Функции обработки массивов: операции над списками. В Perl существует набор функций, которые облегчают обработку массивов пользователем. С помощью простых команд можно выполнять базовые операции с массивами: получать список значений массива, сортировать элементы массива, последовательно обращаться к ним и т. д. Таким образом, массив можно рассматривать как список, а функции — как операции над списками. В табл. 4 дан обзор функций обработки массивов и списков.
Функция push добавляет новый элемент в конец массива, а функция pop удаляет последний элемент. Аргументами функции push являются имя массива и список значений, которые нужно добавить в массив в качестве новых элементов.
За один раз можно добавить несколько новых элементов. Функция pop удаляет из массива последний элемент и возвращает его значение. Функции shift и unshift обрабатывают начало списка. Функция unshift удаляет первый элемент списка, после чего первую позицию занимает тот элемент, который ранее был вторым; shift добавляет в начало списка новый элемент. Аргументом функции unshift является имя массива. Возвращает эта функция значение удаленного элемента. Аргументы функции shift — имя массива и значение элемента, который вы хотите вставить. Эта функция возвращает общее число элементов на текущий момент. Функция sort сортирует элементы массива в соответствии с используемой в системе кодовой таблицей символов (обычно это набор символов ASCII), располагая элементы, в порядке возрастания. Функция split используется для создания массива и присваивания ему значений, полученных из строки. Для обозначения в строке извлекаемых значений применяется заданный разделитель. В результате формируется список значений, которые присваиваются элементам массива. Функция split часто употребляется для обработки строк входных данных, которые уже разбиты на поля, разделенные символом, например запятой или двоеточием. Функция grep представляет собой средство поиска в массиве или списке. Она работает так же, как и одноименная утилита в операционной системе Linux, а ее аргументами являются образец для поиска и имя массива. Функция grep возвращает значение совпавшего с образцом элемента.