
- •Язык программирования 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
Оператор безусловного перехода goto
Perl поддерживает оператор безусловного перехода goto, который является идентичным такому же оператору языка программирования С. Ниже приведен пример использования оператора goto для вывода чисел от 1 до 10:
$i = 1;
loop:
print $i++, ' ';
if ($i <=10)
{
goto loop;
}
Модификаторы операторов
В языке Perl используются специальные формы конструкции if,unless, while и until, которые позволяют управлять ходом вычислений. В определенных случаях эти cпециальные конструкции могутсделать ваш код более ясным и легко читаемым. Для того, чтобы кодбыло легче читать и его смысл был более очевиден, целесообразновыбирать подходящий формат для записи. Рассмотрим следящее выражение, использующее функцию die для того, чтобы закончить выполнение скрипта, если значение переменной $count меньше чем 10:
if ($count < 10)
{
die;
}
Если расположить функцию die перед оператором if, как показано ниже, число строк кода уменьшится:
die if ($count < 10);
Аналогичным образом, то же самое выражение может быть записано в следующем виде:
($count >= 10) || die;
В данном случае, если переменная $count больше либо равна10, Perl прекращает дальнейшее вычисление в данной строке и функция die не выполняется В противном случае, если переменная$count меньше 10, после вычисления первой части выражения код запускает функцию die и тем самым заканчивает выполнение скрипта. Наконец, в следующем примере использование конструкцииunless также позволяет уменьшить число строк до одной:
die unless ($count >= 10);
Аналогичным образом, следующие циклы while являются идентичными:
$i = 0;
while ($i < 10)
{
$i++;
}
$i = 0;
$i++ while ($i < 10);
Как можно видеть, используя модификацию конструкции, скриптпозволяет сократить число строк в записи цикла до одной. Аналогичным образом, следующие циклы until эквивалентны:
$i = 10;
until ($i >= 10)
{
$i++;
};
$i = 10;
$i++ until ($i >=10);
Примечание: Во всех четырех случаях, даже если выражение для оценивания расположено после инструкции для выполнения, Perl сначала анализирует условие и только потом выполняет инструкцию.
Генерация динамических выражений с помощью функции eval
Поскольку Perl является интерпретируемым языком, ваши скрипты могут использовать Perl для того, чтобы генерировать код <налету>, то есть динамически, во время исполнения скрипта. Именнотак работает отладчик Perl (который сам является Perl-программойс именем Perldb.PL). Проектируя скрипты, вы можете использоватьтакой динамический код для создания динамических переменных именили даже построения специальных подпрограмм. Perl оценивает динамические выражения, используя функцию eval. В следующем примересоздается динамическая инструкция путем присвоения переменной вкачестве значения текста, который, собственно, и содержит требуемую инструкцию языка Perl. Дальнейшие инструкции используют функцию eval для того, чтобы выполнить эту инструкцию:
$perl_statement = 'print "Hello, world\n";';
eval $perl_statement; # выведет Hello, world
$i = 1001;
$varname = '$i';
print eval $varname; # выведет значение $i
Примечание: Использование скриптом функции eval таит в себе опасности, в особенности, если скрипт передает функции eval данные,полученные от пользователя. Используя функцию eval, скрипт можетвыполнить произвольную команду языка Perl, включая даже системные команды. Это дает возможность пользователю контролироватьпрограмму, что может быть особенно рискованным для сетей Internetи Web.