
- •Язык программирования 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
Условные операторы
Многие предыдущие примеры использовали оператор if. В языкеPerl оператор if почти что идентичен оператору if в языке С.Отличие, однако, состоит в том, что в языке С оператор if можетиспользовать простую инструкцию без фигурных скобок, тогда как вязыке Perl инструкции обязательно должны быть заключены в фигурные скобки, образуя блок.
if (expr)
statement; // приемлемо для C но не для Perl
if (expr)
{
statement; # вот так нужно делать в Perl
}
Аналогичным образом инструкции языка Perl else работает немного отлично от соответствующей инструкции в С. В языке Perl инструкции также должны быть заключены в фигурные скобки и образовать блок:
// Пример в С неприемлемо в Perl
if (expr1)
statament1;
else if (expr2)
statement2;
else
ststement3;
Ниже показано, что Perl позволяет использовать конструкциюelsif:
if (expr1)
{
statament1;
}
elsif (expr2)
{
statement2;
}
else
{
ststement3;
}
Оператор unless
В языке программирования С программисты используют логическое отрицание (!) для изменения булевой величины на противоположное, как показано ниже:
if (!(expr)) // Отрицание на С
{
statement;
}
Наряду с использованием логического отрицания, скрипты Perlчасто содержат оператор unless, который обеспечивает то же самое,что и записанный выше код на С.
unless (expr)
{
statement;
}
Примечание: В отличие от языка С, Perl не содержит оператора переключения switch.
Оператор do
Одним из частных случаев блочных операторов служит операторdo, который позволяет блоку инструкций возвращать значения. Значением, которое оператор do возвращает, является значение последнего выражения, оцененного в рамках блока. Например, следующийоператор do сравнивает строковую переменную $Month с месяцами года и присваивает переменной $DayCount значение, равное числу днейв месяце:
$DayCount = do
{
if ($Month eq 'September' || $Month eq 'April' || $Month eq 'June' ||
$Month eq 'November')
{
30;
}
elsif ($Month eq 'Februry')
{
$Year & 3 ? 28 : 29; # Проверка на весокосный год
}
else
{
31;
}
};
Обратите внимание, что Perl требует наличия точки с запятойв конце блока do. Не путайте блок do с оператором do while, который будет рассматриваться ниже в этой главе.
Циклы и ветвления
Perl поддерживает операторы циклов for, while и do с небольшими отличиями от их реализации в языке С. Существенным отличием служит то, что Perl требует использования инструкций блоками, заключенными в фигурные скобки. Кроме того, как вы познакомитесь , далее, Perl расширяет конструкцию цикла, что6ы обеспечитьее некоторые новые формы. В следующих примерах циклы for, while иdo работают аналогичным образом на языках С и Perl:
for($i = 0; $i< 100;$i++)
{
printf("%d\n", $i) ;
}
while ($i > 0)
{
printf("%d\n", $i-);
}
do {
printf("%d\n", $i++);
} while ($i < 0);
Конструкция циклов на языке С отлична от конструкции на языке Perl еще и в том, что Perl не содержит оператора break, а оператор continue выполняет совершенно иную функцию. К счастью, Perlобеспечивает некоторые новые, более гибкие и более интуитивно понятные конструкции:
? last выход из цикла (как оператор С break)
? next начать новую итерацию (как оператор С continue)
? redo повторить текущую итерацию
Для понимания конструкций циклов на языке Perl, необходимо разобраться с использованием блока continue. Рассмотрим следующий цикл while, который содержит блок continue:
$i = 100;
while ($i > 0)
{
print $i;
} continue {$i-}
Вы можете представлять себе блок continue как третье выражение в цикле for, которое выполняется на каждой итерации. Аналогичным образом Perl выполняет блок continue в конце каждой итерации. Однако, как вы узнаете далее, блок continue обеспечиваетскрипту более полный контроль над процессом, чем обеспечиваетцикл for. Когда цикл на языке Perl использует оператор next, блокcontinue все равно выполняется, если только он существует. Однако если цикл использует оператор redo, блок continue не исполняется.
МЕТКИ
В скрипте Perl метки просто означают имя, соответствующеенекоему положению внутри скрипта. Имена меток оканчиваются двоеточием (например, outerloop:). Используя оператор goto, скриптможет осуществлять переходы на метку. Дополнительно могут использоваться операторы last, next и redo, для перехода к метке.Следующий код иллюстрирует использование оператора last для перехода на метку:
outerloop: while ($i > 0)
{
while ($j > 0)
{
#Здесь какой-нибудь другой процесс
if ($needToAboutLoop)
{
last outerloop;
}
}
}
В этом случае инструкция содержит ветвь last для перехода наметку outerloop и окончания выполнения цикла.