Для работы с таким популярным типом данных, как массивы, в Perl существует много удобных функций. Когда требуется организовать обработку списка, поочередно извлекая из него элементы, начиная с первого, применяется встроенная функция
$first = shift @array; # извлечь первый элемент в $first
# синоним: ($first, @array) = @array;
С помощью этой функции можно организовать цикл обработки массива, который закончится после извлечения из него последнего элемента, например:
while (my $first = shift @array) { # пока @array не опустеет
print "Обработан элемент $first.";
print "Осталось ", scalar @array, " элементов\n";
}
Обратите внимание, что для вывода текущего размера массива нужно использовать
unshift @array, $e1,$e2,$e3; # вставить значения в начало
# синоним: @array = ($e1,$e2,$e3, @array);
С помощью массива можно организовать стек, данные в котором обрабатываются по алгоритму LIFO ("last in, first out", "последним пришел - первым ушел"). Для добавления данных в стек применяется операция
push @stack, $new; # добавить элемент в конец массива
# синоним: @stack = (@stack, $new);
Для извлечения одного значения из стека служит встроенная функция
$last = pop @stack; # изъять последний элемент массива
При помощи комбинации функций
Для удаления или замены подсписка в массиве можно использовать функцию
@array = (1..7); # исходный массив
$offset = 2; $size = 4; # смещение и размер удаляемого списка
@deleted = splice @array, $offset, $size, qw(новый список);
# в @array теперь (1, 2, 'новый', 'список', 7)
# в @deleted попали 4 удаленных элемента (3, 4, 5, 6)
Если список для вставки не указан, то подсписок от элемента с индексом
Операция сортировки списка выполняется встроенной функцией
@unsorted = (12, 1, 128, 2, 25, 3, 400, 53);
@sorted = sort @unsorted;
# в @sorted будет (1, 12, 128, 2, 25, 3, 400, 53)
Если нужно упорядочить список другим образом, то нужно в качестве первого аргумента функции указать блок, выполняющий сравнение двух элементов сортируемого списка и возвращающий значения -1, 0, 1 - они означают, что первый элемент меньше, равен или больше второго. При сравнении чисел это проще всего сделать с помощью операции
@sorted = sort {$a <=> $b } @unsorted;
# в @sorted будет (1, 2, 3, 12, 25, 53, 128, 400)
В блоке сравнения переменные
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии