
- •Язык программирования 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
Цикл until
Еще одной конструкцией цикла в языке Perl является циклuntil, который является противоположностью циклу while. Как выпомните, в цикле while инструкции выполняются до тех пор, покавыполняется заданное условие. В цикле until, напротив, инструкции выполняются до тех пор, пока не будет выполнено условие. Например, рассмотрим цикл while, такой, как показан на следующейстранице.
while (!(expr))
{
statement;
}
Используя цикл until, можно создать идентичный цикл, показанный ниже:
until (expr)
{
statement;
}
Аналогичным образом следующая конструкция do while использует оператор логического отрицания для того, чтобы выполнять цикл, пока заданное булево выражение не станет истинным:
do {
statement;
} while (!(expr));
Используя конструкцию do until, вы можете сформировать идентичный цикл без использования логического отрицания:
do
{
statement;
} until (expr);
Циклы for и foreach
Perl поддерживает цикл for совершенно аналогично языку С:
for (statement1; expression; statement2)
{
statement3;
}
Например, следующий код использует цикл for для того, чтобывывести значения чисел от 0 до 100:
for ($digit = 0; $digit <=100; $digit++)
{
print $digit, ' ';
}
Дополнительно Perl содержит конструкцию цикла foreach, который позволяет скрипту организовывать итерации в списках и массивах. Рассмотрим пример:
@list = ('a','b','c');
foreach $arg (@list)
{
print "List item: $arg\n";
}
foreach $i (1..10)
{
print "iteration $i\n"
}
В первом случае цикл foreach осуществлял перебор значений всписочной переменной @list. Во втором примере в цикле foreachосуществляется перебор чисел в диапазоне от 1 до 10. Внутри цикла foreach может фигурировать список, состоящий излитералов, или массив, как было проиллюстрировано в предыдущемпримере. После выполнения одной итерации циклом, специальная скалярная переменная {$arg в первом случае и $i во втором случае)принимает значение из заданного списка элементов. Область видимости этой скалярной переменной в цикле foreach ограничиваетсятелом цикла. Поэтому скалярная переменная цикла, foreach не будет конфликтовать с идентичным именем переменной, определеннойвне цикла. В следующем коде переменная с именем $i используетсявнутри и вне цикла foreach:
$i = 1001;
foreach $i (1..9)
{
print "$i\n"; # цикл выведет 123456789
}
print "$i\n";
Как можно увидеть из этого примера, переменная $i, используемая для организации итераций цикла, не конфликтует с переменной $i, определенной вне цикла. Особенностью цикла, foreach, которую ваши скрипты могут использовать, является возможность модификации элементов массива.(Будьте осторожны при реализации этой возможности!) Рассмотримследующий цикл foreach, который добавляет значение 10 каждомуэлементу массива:
@list = 1..5;
foreach $i (@list)
{
$i += 10;
}
$, = ' ';
print @list; # выведет 11 12 13 14 15
Сделаем несколько заключительных замечаний относительно цикла foreach. В языке Perl имена foreach и for рассматриваются каксинонимы. Поэтому в скриптах можно использовать эти имена попеременно. Perl, в свою очередь, будет определять тип цикла, основываясь на его контексте.