Шаг 8 - Модули.

Так же как и в других языках программирования, в перле можно работать с модулями. Модулем считается совокупность подпрограмм заключенных в один файл. Хотя в перле модули можно записать в один файл, это позволяет структурировать вашу программу. Так же это удобно когда программа становится очень большая, и её чтение становится затруднительным. Когда у вас есть подпрограммы, которые часто используются в разных программах, тогда можно использовать модуль как отдельный файл и экспортировать подпрограммы из него.

Пример:

 package main;
 {
   print "Hello!!!!!!!!";
 }
Давайте по подробнее рассмотрим этот пример. Здесь 'package' - идентификатор начала модуля, а 'main' - имя этого модуля, причем это имя зарезервировано и используется, как и название главного модуля, то есть если вы запустите скрипт, который состоит из одних модулей, то его выполнение начнётся именно с модуля main.

Пример:

 package mod1;
 {
  @array = ('hello','bay','hay');
  sub proc1
  {
    print "@array \n";
  }
 }
 package main;
 {
  mod1::proc1;
  print "@mod1::array \n";
 }

Результат:

  hello bay hay
  hello bay hay
Приведенный выше пример работает, если вы включили его в один файл. Так же есть ещё одно неудобство (по крайней мере, я не додумался, как это решить), модуль main надо описывать в самом конце файла, так как надо вперед описать другие модули. Вернемся к нашему примеру. Обратите внимание, как надо ссылаться на переменные и процедуры в другом модуле, здесь всё пишется как обычно, но к имени переменной в начало добавляется имя_модуля+'::'.

Модуль можно так же определить и внутри другого модуля, всё делается точно также, только обращение к его содержимому выглядит так:

имя_модуля::имя_подмодуля::переменные_или_продрограмма

Пожалуй, наиболее полезным является создание библиотек - файлов с заключенными в них модулями. Имеются так же стандартные библиотеки, в unix они содержатся в каталоге /usr/lib/perl/, и имеют расширение 'pm'. Вы можете записать туда свою библиотеку и использовать её. Вернемся к созданию библиотек. Создайте файл с расширением pm и поместите его в указанный выше каталог.

#--------------------------------------------------
#  Главный файл можете поместить его куда хотите.
#--------------------------------------------------

use mod1;      # Подключение библиотеки mod1
mdo1::proc1;   # Использование подпрограммы из модуля mod1
proc2;	       # Почему то подпрограммы можно писать без ссылки на модуль
print "$mdo1::var1";    # Печать значения переменной и модуля
#----------END_FILE--------------------------------

#--------------------------------------------------
# Собственно сама библиотека, с именем файла
# mod1.pm, имя файла должно соответствовать
# названию модуля.
#--------------------------------------------------

package mdo1;
require Exporter;	# Нужна для экспорта перемененных и подпрограм
@ISA = qw(Exporter);	#
@EXPORT = qw(proc1 proc2); # Экспорт процедур
@EXPORT_OK = qw( $var1 ); # Экспорт переменных
 $var1 = 10;
 $var2 = 10;
sub proc1
  {
    print "Hello!!!!!!!!!!";
  }
sub proc2
  {
    print "Привет!!!!!!!!";
  }

#------------END_FILE------------------------------

В этом примере модуль не ограничивается блоком, так как начало файла является началом модуля, а конец - концом.


Предыдущий Шаг | Оглавление

By Vasya Vazhesov.