Владимир Маслов - Введение в Perl
В Перл нет специального синтаксиса для классов. Но функционально полноценными классами могут быть модули. При этом подпрограммы модуля становятся методами, а с помощью массива @ISA можно реализовать механизм наследования в классах. Более подробно классы описаны отдельно.
Создание библиотеки.
Если вы хотоите создать модуль отдельным файлом и использовать как библиотеку подпрограмм, при этом вызывать подпрограммы библиотеки не указывая имени модуля, вам необходимо оформить модуль следующим образом:
package имя_модуля; # Такое же как и имя этого файла без расширения '.pm'
require Exporter; # Обязательная строка для экспорта имен
@ISA = qw(Exporter); # -//-
@EXPORT = qw(func1 func2) # Перечисляем имена функций. Внимание ! нет запятой!
@EXPORT_OK = qw( $переменная @массив ); # Указать публичные переменные, массивы и т.д. если необходимо
{ # Начало блока модуля
.....
sub func1
........
sub func2
........
1;
}
Данный файл с расширением ".pm" должен храниться в одной из библиотечных директорий Перл. Они перечислены в массиве @INC одно из них обычно "/usr/local/lib/perl/".
В головной программе вы указываете:
use имя_модуля;
и вам становятся доступны имена подпрограмм данного модуля.
Стандартные Перл библиотеки.
Стандартный набор библиотек обычно поставляется с дистрибутивом Перл они разделяются на pragma библиотеки (работают как директивы компилятору) и стандартные библиотеки.
Pragma библиототеки.
Данные библиотеки используют как:
use имя;
когда хотят включить действие и
no имя;
когда выключить.
В стандартный набор входят следующие pragma:
diagnostics – Включить режим расширенной диагностики.
integer – Использовать целочисленную арифметику.
less – Режим минимальной загрузки компилятора.
overload - Режим переопределения операторов.
sigtrap - Режим слежения за прерываниями.
strict - Режим ограниченного использования «опасных» операторов.
subs - Режим обязательного декларирования подпрограмм.
Стандартные библиотеки.
AnyDBM_File Возможность работы с разными типами баз данных.
AutoLoader Загрузка в память функций только во время вызова.
AutoSplit Разделить модуль для автозагрузки.
Benchmark Анализ скорости исполнения программы.
Carp Предупреждения об ошибках.
Config Доступ к конфигурации Перл.
Cwd Получить имя текущей рабочей директории.
DB_File Работа с базой данных формата Berkley DB.
Devel::SelfStubber Режим отладки автозагрузки.
DynaLoader Динамическая загрузка библиотек C.
English Использовать длинные имена встроенных переменных.
Env Импортировать имена переменных окружения
Exporter Обеспечивает экспорт/импорт для модулей.
ExtUtils::LibList Определяет используемые библиотеки.
ExtUtils::MakeMaker Создает файл проекта Makefile
ExtUtils::Manifest Программы для создания и проверки файла MANIFEST
ExtUtils::Mkbootstrap Применеие файла начальной загрузки для DynaLoader.
Fcntl Определения как и в С Fcntl.h
File::Basename Синтаксический разбор спецификации файла.
File::CheckTree Быстрый проход по директориям диска.
File::Find Быстрый поиск файлов по директориям.
FileHandle Обеспечивает объектный метод доступа к указателям файлов.
File::Path Создание/удаление директорий.
Getopt::Long Расширенная обработка опций.
Getopt::Std Стандартная обработка опций.
I18N::Collate Сравнение символов локальной кодировки.
IPC::Open2 Межпроцессорный обмен по чтению и записи.
IPC::Open3 Межпроцессорный обмен по чтению, записи, и обрабоки ошибок.
Net::Ping Тест доступа к хосту.
POSIX Стандартный интерфейс по IEEE Std 1003.1
SelfLoader Загрузка функций только по вызову.
Socket Определение структур и констант как и в С socket.h
Test::Harness Стандартный тест с статистикой.
Text::Abbrev Создание таблицы сокращений по списку.
Подробное описание каждой библиотеки записано в самом файле.
CPAN
Програмисты всего мира работающие с Перл создали общедоступную библиотеку модулей CPAN. Она доступна через Интернет и содержит огромное количество различных по назначению модулей.
К ним относятся документаторы, системные интерфесы, интерфейсы работы с базами данных, работа в сети, с файлами, Интернет-броузеры, системы поиска, огромное количество CGI скриптов для Web серверов и многое многое другое. Список некоторых CPAN серверов вы можете найти в приложении.
Форматы
В Перл реализован удобный метод создания форматированных отчетов. С помощью оператора format вы описываете заголовки, размеры полей, указываете положение данных на листе в удобной текстовой форме. Затем выполняете команду write(файл) которая выводит отформатированные данные в указанный файл.
Оператор формат имеет следующий синтаксис:
format имя =
FORMLIST
.
Обратите внимание на то что описание формата идет после строки format и заканчивается символом '.' в начале строки.
Здесь 'имя' – это имя формата, такое же как и имя указателя выходного файла.
Если 'имя' отсутсвует то значение по умолчанию – STDOUT.
FORMLIST – это строки формата. Они бывают трех типов:
1. Комментарий. Строка начинается символом '#'.
2. Описатель полей данных (picture).
3. Строка аргументов используемых описателем.
Описатель – это строка которая выводится в виде «как есть» за исключением специально обозначенных форматов полей данных. Каждое поле начинается либо символом '@' либо '^'.
В описательной строке указывается только положение и вид выводимых данных, но не имена полей и переменных.
Для этого предназначена следующая строка аргументов которая следует всегда после описателя и содержит имена переменных или целые выражения в порядке указанном описателем.
Размер и вид поля в описателе обозначается следующими символами:
«>>>>» – выровнить значение по правому краю.
«<<<<» – -//– по левому.
«||||» – -//– по центру.
«####.###» – формат числа с точкой.
«@*» – многострочная строка. Данные выводятся в колонку.
Размер поля равен количеству указанных символов.
Символ '^' в начале поля имеет специальное значение.
Так:
«^####» – пусто если переменная не определена.
для строчного скаляра:
«^<<<<<» – Выводится сколько возможно символов, а значение переменной меняется на остаток вывод которого можно продолжить на следующих строках которые могут иметь свои поля.
Пример:
#!/usr/local/bin/perl
#
# Программа печати пригласительного билета
#
$кому = «Чапаеву Василию Ивановичу»;
$от_кого = «Компания МММ»;
$адрес = «Москва, ул. Петровка, д 38»;
$текст = "Уважаемый Василий Иванович! Компания МММ имеет честь пригласить
Вас и Ваших близких на презентацию наших новых хромовых сапог, сделанных
на уровне мировых стандартов качества и дизайна.";
format STDOUT =
П Р И Г Л А С И Т Е Л Ь Н Ы Й Б И Л Е Т
Кому: @<<<<<<<<<<<<<<<<<<<<<<<<<< | ^|||||||||||||||||||||||||||||||
$кому, $текст
| ^|||||||||||||||||||||||||||||||
$текст
От кого: @<<<<<<<<<<<<<<<<<<<<<<< | ^|||||||||||||||||||||||||||||||
$от_кого, $текст
| ^|||||||||||||||||||||||||||||||
$текст
Адрес:@<<<<<<<<<<<<<<<<<<<<<<<<<< | ^|||||||||||||||||||||||||||||||
$адрес, $текст
| ^|||||||||||||||||||||||||||||||
$текст
| ^|||||||||||||||||||||||||||||||
$текст
| ^|||||||||||||||||||||||||||||||
$текст
Отпечатано в типографии ИТУ 38
.
write(); # Вывод данных.
exit 0; # Конец программы
Результат:
П Р И Г Л А С И Т Е Л Ь Н Ы Й Б И Л Е Т
Кому: Чапаеву Василию Ивановичу | Уважаемый Василий Иванович!
| Компания МММ имеет честь
От кого: Компания МММ | пригласить Вас и Ваших близких
| на презентацию наших новых
Адрес:Москва, ул. Петровка, д 38 | хромовых сапог, сделанных на
| уровне мировых стандартов