
- •Язык программирования 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
Форматированный вывод данных функцией printf
Perl имеет функции printf и sprintf, которые очень похожи насоответствующие функции библиотеки времени выполнения языка С.Они имеют следующий формат:
$result = printf([FileHandle] Format, List);
$result = sprintf(Format, List);
По умолчанию функция printf посылает форматированный выходна стандартный выход STDIO, а функция sprintf возвращает форматированную строку. В обоих случаях формат строк почти аналогиченфункциям языка С, исключая только отсутствие поддержки функциямиязыка Perl спецификатора длины (*). Следующий фрагмент программыиллюстрирует использование функций printf и sprintf.
$precision = 2;
$pi = 3.1415;
printf("%.2f\n", $pi); # выведет 3.14
printf("%.${precision}f", $pi); # выведет 3.14
Вызов внешних программ из скрипта на языке perl
Будучи в известном смысле заменой скриптов shell, Perl обеспечивает поддержку системного взаимодействия, включая вызов внешних программ. В следующих разделах рассматривается несколько способов вызова внешних программ из скриптов Perl. Имейте, однако, ввиду, что позволяя скриптам выполнять системные команды, вы темсамым открываете бреши в системе безопасности вашего узла. Придерживайтесь общего правила не выполнять внешних команд из скрипта на языке Perl. Тем не менее, если вы вынуждены выполнять внешние команды из скрипта, то можете использовать для этих целейвстроенные функции system, exec или fork.
Регулярные выражения
На протяжении этой главы вы познакомились с примерами функций для обработки строк. Многие из них основаны на концепции регулярных выражений. Как вы видите из следующих разделов, скриптыязыка Perl широко используют регулярные выражения для обработкитекста. Если регулярные выражения внове для вас, то не беспокойтесь. Спустя короткое время после того, как вы познакомитесь снесколькими разделами этой главы, регулярные выражения станут длявас просты и понятны.
Обзор регулярных выражений
Регулярные выражения являются причудливым термином, возникшим в компьютерной науке и служащим для обозначения образца, состоящего из символов. Скрипты на языке Perl используют символьныеобразцы просто для того, чтобы провести анализ входных данных,расщепляя их на части. Часто скрипт может проанализировать входные данные, основываясь на пробелах, запятых, символах табуляциии других разделителях. Но когда входные данные имеют произвольный формат то лучше всего с такой задачей справляются регулярные выражения.
Синтаксис регулярных выражений
Для сокращения размеров регулярных выражений, Perl использует специальные символы. Таблица 12.6 содержит список некоторых из символов, используемых скриптами языка Perl в регулярных выражениях.
Табл. 12.6. Символы, используемые в регумрных выражениях
Символ |
Описание |
. |
Соответствует любому символу (за исключением символа новой строки) |
(..) |
Группирует последовательность элементов |
+ |
Удовлетворяет предыдущему образцу один или большее количество раз |
? |
Удовлетворяет образцу нуль или один раз |
* |
Соответствует образцу один или нуль раз |
[...] |
Соответствует символу из заданного множества |
[^...] |
Соответствует символу из множества, полученного отрицанием |
(...|...|...) |
Соответствует одной из альтернатив |
^ |
Соответствует началу строки |
$ |
Соответствует образцу в конце строки |
{n,m} |
Соответствует образцу от n до m раз |
{n} |
Соответствует образцу точно n раз |
{n,} |
Соответствует образцу минимум n раз |
\n\t etc. |
Соответствует знаку новой линии, символу табуляции и т. д. |
\b |
Соответствует на границе слова |
\B |
Соответствует внутри границ слова |
\d |
Соответствует цифре |
\D |
Соответствует не цифре |
\s |
Соответствует пробелу |
\S |
Соответствует не пробелу |
\w |
Соответствует букве или цифре |
\W |
Соответствует символу, не являющемуся ни буквой, ни цифрой |
Perl помещает регулярные выражения (образцы, шаблоны) в слэши, т. е. в наклонные черточки, например, в виде /pattern/. Следующий фрагмент программы иллюстрирует регулярные выражения языка Perl:
# the following regular expressions are true if:
/ig/ # string contains 'ig'
/(b|d|f)ig/ # string contains 'big', 'dig' or 'fig'
/[0-9]+/ # string contains a number
/[A-Za-z][A-Za-a0-9_]*/ # string contains an identifier
Если эти выражения кажутся вам бессмысленными, не беспокойтесь. В этой главе мы собираемся рассмотреть несколько регулярных выражений. Сейчас просто запомните, что Perl помещает регулярные выражения между двумя наклонными чертами-слэшами, как показано выше.