Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #44




Perl :: модули, пакеты, классы, объекты



Содержание



Предисловие.


Хотелось бы сегодня вкратце рассказать об обширной области Perl - о модулях, пакетах, классах и работе с ними. В следующих статьях я расскажу о наследовании и связывании переменных (это тоже имеет отношение к классам). Материал рассчитан на начинающих, но по битам разжевывать не буду. Для более подробного изучения следует обратиться к мануалам Perl. Очередной раз рекомендую книгу Perl Programming издательства O'Reilly (Программирование на Perl - переводное русскоязычное издание издательства Символ), среди авторов которой присутствует имя создателя Perl - Ларри Уолла.


Немного определений.


Что такое модуль? Это отдельный файл с частью программы.

Что такое пакет? Это пространство имен, обозначаемое командой package.

Что такое класс? Это то же самое, что и пакет.

Что такое объект? Это ссылка на любой встроенный тип данных, "освященная" командой bless.

Что такое связанная переменная? Это переменная (не ссылка), "связанная" с классом командой tie.


Соглашение именования.


На самом деле никаких ограничений нет, но, если придерживаться некоторых правил, то это уменьшит вероятность ошибки в коде.

Имена переменных и функций принято начинать с маленькой (строчной) буквы, а имена пакетов (классов) и модулей - с большой (прописной).

Вообще, имена модулей допустимо именовать как угодно, но если вы используете для загрузки команды use или require с "голыми" именами, то правильно будет именовать именно с большой буквы.

Расширение имен файлов (суффикс) принято такое: pl - для главного модуля, pm - для загружаемых модулей.


Модули.


Модуль не требует никакого особого оформления. Если модуль содержит одноименный пакет, то обычно его начинают с команды package.


Код: (perl)
# файл Example1.pm
package Example1;

Загружают модуль командами use и require. Команда use загружает модуль на этапе компиляции, когда Perl находит ее в процессе синтаксического разбора. Команда require загружает модуль на этапе исполнения, когда логика выполнения доходит до этой команды.

Форматы команд:


Код: (perl)
# Загружает модуль Module.pm
use Module;

# загружает модуль Dir1/Dir2/Module.pm
use Dir1::Dir2::Module;

# Загружает модуль и импортирует из него в текущее пространство имен имена name1, name2 и name3
# Требуется наличие в модуле одноименного пакета и метода import
use Module qw(name1 name2 name3);

# Загружает файл, заданный выражением
use EXPR;

Команда require имеет точно такой же формат.

Загружаемые файлы ищутся в директориях, указанных в массиве @INC. Имена успешно загруженных модулей помещаются в хеш %INC (имя используются в качестве ключа, а значение содержит полный путь к файлу).


Если есть неуверенность в том, что модуль существует, и нужно обработать ошибку, то можно применить блок eval.


Код: (perl)
eval { require Module; };
if ($@)
{
# error...
}

Также можно обратить внимание на команду do в форме со строковым выражением.


Пакеты и классы.


Как я уже написал выше, пакет - это пространство имен. В одном файле можно последовательно объявлять несколько пакетов, а также можно объявлять несколько раз один и тот же пакет. Команда package влияет на интерпретацию имен глобальных переменных, у которых не указано имя пакета (не квалифицированные имена), в том числе на переменные, объявленные с ключевым словом local, и действует до конца блока, в котором она определена, либо до следующего переназначения пакета. На ранее объявленные переменные с ключевым словом our команда не влияет.


Статью целиком можно прочесть на нашем сайте. Загляните на наш форум по Perl.


В интернете у нас есть уже два "домика". Если не затруднит, нажмите на оба: один и второй.




В избранное