Иллюстрированный самоучитель по Perl

Библиотеки

Специальный встроенный хеш-массив % INC содержит по одному элементу для каждого файла, включенного при помощи do или require. Ключом является имя файла в том виде, как оно указано в качестве аргумента функций do или require, а значением – его полное маршрутное имя.

Встретив директиву require myfile, интерпретатор peri просматривает специальный хеш-массив %INC, проверяя, не был ли файл rayfile уже включен ранее при помощи функций require или do. Если да, то выполнение функции require завершается. Таким образом файл под одним именем может быть включен только один раз. В противном случае интерпретатор просматривает каталоги, имена которых содержатся в специальном массиве @INC, в поисках файла mу file. Если файл найден, он выполняется, иначе директива require завершает выполнение с выдачей сообщения об ошибке:

Can't find myfile in @INC

Замечание
Замечание об использовании имени файла В Директиве require EXPR. Обычно имена библиотечных файлов имеют суффикс ".pl", например, myfile.pl. Интерпретатор peri воспринимает точку"." в качестве знака операции конкатенации двух строк "myfile" и "pi" и пытается найти файл myfiiepl. Во избежание подобных ошибок имя файла в директиве require следует заключать в кавычки:

require "myfile.pl";

Если аргумент EXPR является словом без суффиксов, не заключенным в кавычки, то директива require предполагает, что оно имеет суффикс ".рl", чтобы облегчить загрузку стандартных модулей, имеющих расширение ".рl".

Создание и подключение библиотечного файла

Для создания собственной библиотеки следует выполнить следующие шаги. П Создать каталог для хранения библиотечных файлов.

  • Сохранить наборы подпрограмм в отдельных файлах-библиотеках. Переместить библиотечные файлы в специально созданный для них каталог.
  • В конец каждого библиотечного файла поместить строку " i;". Смысл этого действия заключается в следующем. Как видно из приведенного текста, включение библиотечного файла в основную программу осуществляется через его выполнение функцией do:
$result = do $realfilename;

Значение $resuit, возвращаемое функцией require, должно быть ненулевым, что является признаком успешного выполнения кода инициализации. Простейший способ получить ненулевое значение – добавление в конец каждого библиотечного файла строки "1,-".

  • В основной программе использовать директиву require, указав в качестве ее аргументов имена требуемых библиотечных файлов.
  • Добавить в массив @INC имя каталога, содержащего библиотечные файлы, либо при запуске основной программы передать это имя интерпретатору peri при помощи ключа -i. \ '

Создадим библиотечный файл myiib.pl и поместим его в каталог /usr/temp/periiib. Файл myiib.pl содержит единственную подпрограмму Numof Args (), которая выводит число аргументов, переданных ей при вызове.

# библиотечный файл /usr/temp/perllib/mylib.pl sub NumOfArgs {
return $#_+!; }
I;

Создадим файл основной программы mymain.pi:

#!/usr/bin/perl
unSHIFT (@INC, "/usr/temp/perllib");
require "mylib.pl";
print "Число аргументов=", NumOfArgs(1.2.3.4), "\n";

В результате выполнения файла mymain.pi будет выведена строка:

Число аргументов=4

Обратите внимание на выполнение всех шагов, необходимых для создания и подключения библиотеки.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.