
- •Язык программирования 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
Упаковка данных в бинарные строки
Для вывода бинарных данных скрипт должен запаковать скалярные величины в строки бинарных символов. Для этого используетсяфункция pack, формат которой указан ниже:
$result = pack(Template, List);
Следующий фрагмент программы иллюстрирует использование функции pack:
$color = pack("C3", $r, $g, $b);
$data = pack("L*", @longword);
$bin = pack("S2L", @stuff);
Функция pack использует те же самые символы шаблона, что ифункция unpack, за исключением символов а. А, и, х, X, @.
Работа с каталогами
Perl предоставляет не только широкий набор функций для обработки файлов, но также несколько очень удобных функций для сканирования каталогов. В следующих разделах мы рассмотрим некоторыеиз основных функций для работы с каталогами в деталях.
Открытие, чтение и закрытие каталогов
Скрипты на языке Perl позволяют открывать и читать содержимое файлов. Точно так же эти скрипты открывают каталоги и читаютимена содержащихся в них слайдов. Для открытия каталога скриптыиспользуют функцию opendir, передавая указатель каталога и путь кнему. Для чтения списка файлов, содержащихся в каталоге, скриптиспользует функцию readdir. Наконец, для закрытия каталога используется функция closedir. Следующий фрагмент программы иллюстрирует использование функции readdir для того, чтобы вывести наэкран список файлов в текущем каталоге:
opendir(Dir, $INC[2]) || die;
while ($file = readdir(Dir))
{
print "$file \n"
}
closedir(Dir);
В этом фрагменте используется переменная $INC[2J для доступа к текущему каталогу. Изменяя $INC[2] на $ARGV[0], скрипт выводит на экран список файлов, содержащихся в каталоге, который выуказали в командной строке. В дополнение к функциям для работы скаталогами, которые были рассмотрены выше, Perl предлагает ещенабор фикций, которые позволяют позиционировать текущий указатель в списке каталога:
$result = rewinddir(DirHandle);
$result = telldir(DirHandle);
$result = seekdir(DirHandle, Position);
Форматированный вывод
В этой главе вы познакомились с несколькими способами форматирования выходных данных скрипта с помощью функции print. Аналогично языку С, Perl также поддерживает функции printf и sprintf.В дополнение Perl также поддерживает генерацию отчетов в форместолбцов, используя шаблоны форм.
Использование функции print
В этой главе скрипты широко использовали функцию print. Кроме того, Perl обеспечивает специальные переменные, которые влияютна работу функции print. В таблице 12.5 кратко характеризуютсяэти специальные переменные.
Табл. 12.5. Специальные переменные, которые управляют функциейпечати
Переменная |
Назначение |
$, |
Разделитель для элементов печати |
$" |
Разделитель элементов списка при интерполяции строки |
$\ |
Разделитель для выходных записей |
$# |
Форматирование числового выхода (по умолчанию '%.20g') |
Для использования этих специальных переменных достаточнопросто присвоить им значения, которые вы хотите. Например, в следующем фрагменте программы используется переменная $ для того,чтобы задать сепаратор между элементами печати:
$, = '*';
@list = 1..10;
print @list; # Выведет 1*2*3*4*5*6*7*8*9*10
Оказывается, что переменная $ на самом деле воздействует навсе строки, а не только на те, которые выводятся на печать. Однако чаще всего вы будете использовать ее для того, чтобы изменитьзначение, выводимое функцией print.