Всем известно, что 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; ## Доступна везде
И напоследок скажу - чем больше ты постигаешь возможности языков, тем больше у тебя шансов стать опытным программером =)