• Партнер

  • Всем известно, что 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; ## Доступна везде

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

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии