
- •Язык программирования perl
- •Perl как язык программирования
- •История perl
- •Perl - интерпретируемый язык программирования
- •Богатство возможностей языка perl
- •Использование perl
- •Использование perl как фильтра данных
- •Использование языка perl как шлюза безопасности
- •Frontend-программы для связи с базой данных
- •Использование языка perl для написания cgicкриптов.
- •Знакомство с языком perl
- •Установка perl
- •Использование отладчика perl
- •Типы данных в perl
- •Переменные
- •Скалярные переменные
- •Массивы
- •Роль контекста аля переменных скалярного и векторного типа
- •Ассоциативные массивы
- •Операторы perl
- •Арифметические операторы
- •Побитовые операторы
- •Операторы сравнения
- •Логические операторы
- •Строковые операторы
- •Операторы присваивания
- •Операции для работы со списками
- •Операторы для работы с файлами
- •Приоритеты выполнения операторов
- •Конструкции языка perl
- •Простые и составные операторы
- •Условные операторы
- •Оператор unless
- •Оператор do
- •Циклы и ветвления
- •Цикл until
- •Циклы for и foreach
- •Оператор безусловного перехода goto
- •Модификаторы операторов
- •Генерация динамических выражений с помощью функции eval
- •Подпрограммы
- •Библиотека подпрограмм
- •Использование пакетов для изоляции подпрограмм
- •Обработка строк
- •Функция chop
- •Функция index
- •Функция length
- •Функция substr
- •Функция join
- •Функция split
- •Функции для обработки списков
- •Функция reverse
- •Функция sort
- •Функции работы с массивами
- •Функции push и pop
- •Функция shift
- •Функция unshift
- •Функция splice
- •Функция scalar
- •Функция grep
- •Функции обработки ассоциативных массивов
- •Функция keys
- •Функция values
- •Функция each
- •Функция delete
- •Аргументы командной строки
- •Доступ к переменным окружения
- •Файловый ввод и вывод
- •Открытие файлов и других потоков
- •Построчное чтение и запись данных
- •Чтение и запись блоков данных
- •Обработка бинарных данных
- •Хранение бинарных данных
- •Распаковка строк бинарных данных в переменные языка perl
- •Упаковка данных в бинарные строки
- •Работа с каталогами
- •Открытие, чтение и закрытие каталогов
- •Форматированный вывод
- •Использование функции print
- •Форматированный вывод данных функцией printf
- •Вызов внешних программ из скрипта на языке perl
- •Регулярные выражения
- •Обзор регулярных выражений
- •Синтаксис регулярных выражений
- •Использование регулярных выражений для поиска по ключевымсловам
- •Использование регулярных выражений для анализа входных данных
- •Регулярные выражения для поиска и замены строк
- •Создание скриптов cgi с помощью perl
- •Вызов cgi-скрипта
- •Вызов сgi-скрипта в системе unix
- •Вызов скрипта на языке perl из dos и windows
- •Создание текста и html-документа с использованием языка perl
- •Добавление в документ динамических свойств
- •Доступ к строке запросов
- •Декодирование html-форм с помощью метода post
Функции для обработки списков
В рассмотренных ранее в этой главе примерах мы познакомились с тем, как создать список, сохранить его в качестве значения переменной, организовать итерации по всем элементам списка иполучить доступ к индивидуальному элементу списка. В этом разделе вы познакомитесь еще с несколькими функциями, которые расширяют набор возможностей для работы со списками.
Функция reverse
Функция reverse реверсирует элементы списка. Она имеет следующий формат:
@new_list = reverse(@List);
Функция reverse реверсирует список и возвращает новый результирующий список. Следующий пример иллюстрирует использованиефункции reverse:
@list = reverse(1..5); # Результат 5,4,3,2,1
@list = reverse(@list); # Результат 1,2,3,4,5
Функция sort
Функция sort сортирует элементы списка. Она имеет следующийформат:
@new_list = sort(@List);
или
@new_list = sort(Subroutine @List);
или
@new_list = sort(BlockStatement @List);
Функция sort размещает элементы в списке, упорядочивая их всоответствии с порядковыми номерами символов в таблице ASCII-кодов. Так же как и функция reverse, функция sort возвращает в качестве значения новый список и не воздействует на исходный список. Следующий пример иллюстрирует использование функции sort:
@list = sort (1,5,2,3,4); # Результат 1,2,3,4,5
@list = sort(1,2,10); # 1,10,2 сортировка в ASCII
В подпрограмме или блоке можно изменять упорядочение, всоответствии с которым выполняется сортировка. Следующий примериллюстрирует использование функции sort.
@list = sort({$a <=> $b} (2,1,10)); # @list 1,2,10
@list = sort({$b <=> $a}) (2,1,10); # @list 10,2,1
sub mycomp
{
$b <=> $a
}
@list = sort(mycomp (2,1,10)); # @list 10,2,1
Функции работы с массивами
Как известно, массив представляет собой структуру данных,содержащую одно или несколько значений величин одного типа, например, 100 имен студентов. Perl содержит несколько встроенныхфункций, которые помогают работать с элементами массива. В следующих разделах рассматривается несколько основных функций дляобработки массивов.
Функции push и pop
Скрипты языка Perl используют фикции push и pop для того,чтобы добавлять и удалять элементы с конца массива. Иными словами, функции push и pop позволяют скриптам выполнять операции состеком по принципу: последним вошел, первым вышел. Функция pushимеет следующий формат:
push(@ARRAY, LIST);
Следующий фрагмент иллюстрирует использование функции push:
@list = ();
push(@list,10,20); # @list теперь (10,20)
push(@list,1..3); # @list теперь (10,20,1,2,3)
В противоположность этому функция pop удаляет элемент, который был вставлен в стек последним и возвращает значение этогоэлемента. Функция pop имеет следующий формат:
$value = pop(@ARRAY);
Следующий фрагмент программы иллюстрирует использование функции pop:
# Возьмём @list из предыдущего примера
print pop(@list); # Выведет 3
print pop(@list); # Выведет 2
# Теперь @list (10,20)
Функция shift
Функция shift удаляет и возвращает элемент из начала массива. Эта функция аналогична функции pop с тем только отличием, чтоработает от начала массива по принципу FIFO (<первым вошел, первым вышел>). Функция shift имеет следующий формат:
$value = shift(@ARRAY);
Следующий фрагмент программы иллюстрирует использование функции shift:
# Возьмём @list из предыдущего примера
print shift(@list); # Выведет 10
print shift(@list); # Выведет 20
# Теперь @list ()