Всем известно, что Perl — очень мощный язык программирования, и соответственно содержит многое: от примитивных скаляров до объектно-ориентированного программирования. Но программист, выполняя какой либо проект, старается сделать его универсальным, то есть, чтобы другие люди могли спокойно работать с его программой, в то же время, нужно учитывать то, чтобы модификация кода была легкой и безболезненной.

Это выполнимо, особенно в современных языках высокого уровня, Perl — не является исключением.
Допустим, с использованием модулей.

В моих статьях, в примере кодинга на Perl, я неоднократно юзал внешние perl-скрипты, как правило процедурой do(). Теперь же, поговорим о модулях — как они устроены, как работают и как их использовать.

Все модули в Perl имеют расширение ‘.pm’. Путь к модулям располагается в глобальном массиве @INC. Так, что, если ты не имеешь прав к каталогу /usr/lib/perl5, а тебе нужно подключить собственный модуль, то ты можешь добавить в @INC новый
путь к модулям (функцией push(@INC,»/path/to/your/modules/»)). Тогда проблем с locate возникнуть не должно.

Любой модуль начинается с ключевого слова package, за которым идет название. Затем идет подключения стандартного модуля Exporter (отвечающего за экспорт модулей). Для успешного наследования метода import(), который располагается в модуле Exporter (при подключении пэкэджа выполняется именно такой метод), следует заполнить массив @ISA, в котором будут хранится имена модулей, в которых находятся наследуемые методы.

В каждом модуле, по определению, существуют свои процедуры, переменные, массивы и так далее. Их следует объявить в глобальном массиве @EXPORT (в противном случае вызов извне функции create(), хранящейся в твоем пэкэдже, например, будет непонят компилятором и тебе придется указывать полный путь к ней — yourmodule::create()).

Затем, по умолчанию идет пользовательский, то есть твой код. Пишем нужные процедуры, заполняем переменные и так далее… В завершении модуля идет строка 1; (возвращает 1).

Это самое необходимое для верной работы модуля.
Теперь я покажу как на практике написать, какой-либо простенький модуль. Например, запись указанного слова в файл log.txt

package logging;

use Exporter;
@ISA=(‘Exporter’);
@EXPORT=gw(&logging);

sub logging {
open(LOG,»>log.txt»);
print LOG «check ok\n»;
close(LOG);
}

1;

А затем вызовем модуль из нашей программы командой use.

#!/usr/bin/perl

use logging;
logging();
print «All right!\n»;

Как видишь ничего сложного нет. На этом теория о модулях в Perl не заканчивается. Существует еще множество тонкостей, нюансов и нерешенных задач =) Об этом позднее. Напоследок дам несколько советов по работе с модулями.

1) Существует глобальная переменная $VERSION. С ее помощью можно легко отследить версию модуля, и в случае несовпадения в меньшую сторону — пропустить загрузку модуля. Просто инициализируйте ее в модуле (можно в формате float) и затем вызовите командой use module 1.00 например (если версия ниже 1.00 — загрузки модуля не произойдет).

2) В случае, когда можно обойтись процедурой вместо модуля — не пишите для этого пэкэдж — программа будет работать дольше.

3) Для ограничения переменных в модуле — локализуйте их функцией my(). Тогда, эти переменные не будут доступны извне. Например:

package localize;
my $test = 10; ## Локальная — извне не доступна
$test2 = 20; ## Доступна везде

И напоследок скажу — чем больше ты постигаешь возможности языков, тем больше у тебя шансов стать опытным программером =)

Оставить мнение

Check Also

Tips’n’Tricks из арсенала андроидовода. Самые интересные, полезные и нестандартные трюки с Android

Многие годы мы рассказывали про самые разные способы оптимизировать, модифицировать и твик…