keys (%ассоц~массив) Генерирование списка всех индексных строк в ассоциа-
тивном массиве
values (%ассоц-массив) Генерирование списка значений всех элементов в ассоциа-
тивном массиве
each (%ассоц-массив) Возврат значения следующего элемента и его индексной
строки
delete (%ассоц-масив, индекс-строка) Удаление из ассоциативного массива элемента с указанным индексом
Общие операции над массивами_ Назначение_________________________
undef (массив)___________ Удаление всего массива (скалярного или ассоциативного)
Ассоциативные массивы. В ассоциативном массиве для индексации элементов вместо числовых значений применяются строки. Индексную строку можно считать ключевым словом, которое используется для поиска элемента. В Perl ассоциативный массив определяется с помощью символа %, указываемого перед его именем. Список присваиваемых значений состоит из пар «индексная строка—значение элемента». За индексной строкой следует значение элемента, затем — следующая индексная строка и значение элемента и т. д. В приведенном ниже примере определяется ассоциативный массив city, состоящий из четырех элементов, каждый из которых имеет целочисленное значение и индексную строку в виде названия города.
Для установления ссылки на элемент ассоциативного массива применяется его индексная строка. Индексная строка заключается в одинарные кавычки и фигурные скобки (не круглые!).
print $city{'Fallon'};
Чтобы добавить в ассоциативный массив новый элемент, необходимо задать индекс в виде строки и значение этого элемента.
$city{'LA'} = 45;
Признаком списка значений ассоциативного массива является символ %, который ставится перед именем массива. В следующем примере задан вывод на экран всех значений массива city:
print %city;
В языке Perl для работы с ассоциативными массивами предназначен целый набор функций (списочных операций). С их помощью можно формировать списки ключей или значений. Эти функции облегчают выполнение итерации в ассоциативном массиве. Получить значения строк, применяемых для индексирования элементов ассоциативного массива, довольно тяжело, что отличает его от обычного массива. В скалярном массиве индексирование всегда начинается с 0, а завершается последним элементом. В ассоциативных массивах в качестве индексов выступают произвольные строки. Эти строки служат для обращения к элементам массива. С помощью функции keys можно создать список, состоящий из индексных строк ассоциативного массива. Один из дальнейших путей применения индексных строк — индексирование самого массива. Функция keys использует в качестве аргумента имя ассоциативного массива и возвращает список всех индексных строк, которые можно применять для обращения к отдельным элементам массива. В следующем примере функция keys генерирует список индексных строк массива city. Индексные строки поочередно присваиваются переменной myindex. Затем, при выполнении операции вывода на экран, производится индексирование массива city посредством переменной myindex.
foreach Smyindex ( keys(%city) )
{
print " $city($myindex) \n " ;
}
Функция each подобна функции keys, однако она наряду с индексной строкой для элемента ассоциативного массива возвращает и значение самого элемента. Аргументом функции each является имя массива. Итак, при обращении к функции each возвращается следующий элемент массива и соответствующая ему индексная строка. В примере, приведенном ниже, переменным myindex и myval присваивается индексная строка, а также значение первого элемента массива myvar.
($myindex, $myval) = each (%city) ;
Для обращения к каждому элементу массива можно использовать функцию each, поместив ее в цикл. В следующем примере с помощью функции each переменным myval и myindex поочередно присваиваются каждый элемент массива и его индексная строка.
while ( ($myindex, $myval) = each (%city) ;
{
print "$myval $myindex\n " ;
}
Функция values возвращает список значений всех элементов ассоциативного массива. Ее применение целесообразно, если требуется сформировать список значений элементов ассоциативного массива без индексных строк.
Средством удаления элемента из ассоциативного массива является функция delete. Она использует в качестве аргумента индексную строку удаляемого элемента и возвращает его значение. В следующем примере функция delete применяется для удаления элемента, соответствующего индексной строке «Sacramento».
delete (%myarr, "Sacramento") ;
Удалить целый массив позволяет функция undef. Ее действие распространяется как на скалярные, так и на ассоциативные массивы. При полном удалении массива уменьшается объем используемой памяти.
Управляющие структуры. Управляющие структуры языка Perl подобны управляющим структурам языков gawk и С, а также интерпретатора TCSH. В Perl-сценариях используются циклы, обеспечивающие повторение команд, а также условия, которые позволяют выбирать команду из нескольких заданных. В выражениях условий применяются как строковые (табл. 5), так и числовые (табл. 3) операторы, а также регулярные выражения. Управляющие структуры Perl и их синтаксис описаны в табл. 6.
Таблица 5.Строковые, логические, файловые операции и операции присваивания