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

Библиотеки

Подпрограммы, как мы отметили в цачале главы, служат для объединения группы операторов с целью их повторного использования. Следующим шагом является объединение группы подпрограмм и их сохранение в отдельном файле для последующего использования другими программами. Для реализации этой задачи в языке Perl имеются два механизма: библиотеки и модули.

Исторически первым средством являются библиотеки, появившиеся в версии Perl 4. Библиотека представляет собой пакет, областью действия которого является отдельный файл. Иными словами, библиотека – это файл, содержащий в качестве первой строки объявление пакета.

package package_name;

Имя файла библиотеки обычно имеет расширение pi.

Замечание
После появления модулей термин "библиотека" часто используют в широком смысле для обозначения всего множества модулей в составе Perl, содержащего разнообразные коллекции подпрограмм. Если не оговорено противное, мы будем использовать слово "библиотека" для обозначения файла библиотеки в соответствии с версией Perl 4.

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

Ключевое слово require служит для обозначения встроенной функции Perl. Фактически обращение к функции require () используется в качестве директивы компилятора. Поэтому дальше мы будем использовать применительно к ключевому слову require оба термина: "функция" и "директива-компилятора". Выясним, какой смысл имеет эта директива.

Функция:

require [EXPR]

…загружает внешние функции из библиотеки Perl во время выполнения. Она используется для того, чтобы сделать библиотеку подпрограмм доступной для любой Peri-программы.

Если параметр EXPR отсутствует, вместо него используется специальная переменная $_.

Если параметр является числом, это соответствует требованию, что для выполнения данного сценария необходим интерпретатор peri с номером версии, не меньшим, чем значение параметра. Таким образом, сценарий, который требует Perl версии 5.005, может иметь в качестве первой строки:

require 5.005;

Более ранние версии Perl вызовут немедленное завершение интерпретатора с выдачей сообщения об ошибке.

Если параметр является строкой, функция require включает в основную программу библиотечный файл, задаваемый параметром EXPR. Логика работы функции require соответствует следующему коду:

sub require {
my($filename) = @_; return 1 if $INC{$filename}; .my($realfilename,$result); ITER: {
foreach $prefix (@INC) {
$realfilename = "$prefix/$filename"; if (-f $realfilename) {
$result = do $realfilename; last ITER; } }
die "Can't find $filename in \@INC"; }
die $@ if $@;
die "$filename did not return true value" unless $result;
$INC{$filename} = $realfilename; return $result; }

Замечание
Специальный встроенный массив OINC содержит имена каталогов, в которых следует искать сценарии Peri, подлежащие выполнению в конструкциях do filename, require или use. Первоначально содержит:

  • имена каталогов, переданные при запуске интерпретатору peri в качестве параметра ключа – i;
  • имена библиотечных каталогов по умолчанию (зависят от операционной системы);
  • символическое обозначение текущего каталога ".".
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.