Шаг 129.
Библиотеки. Функция require()

    На этом шаге мы рассмотрим испоьзование функции require().

    Функция

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

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

    Если параметр является числом, это соответствует требованию, что для выполнения данного сценария необходим интерпретатор perl с номером версии, не меньшим, чем значение параметра. Таким образом, сценарий, который требует 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;
}


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

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


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

   Can't find myfile in @INC


   Замечание об использовании имени файла в директиве require EXPR. Обычно имена библиотечных файлов имеют суффикс ".pl", например, myfiie.pl. Интерпретатор perl воспринимает точку"." в качестве знака операции конкатенации двух строк "myfiie" и "pl" и пытается найти файл myfile.pl. Во избежание подобных ошибок имя файла в директиве require следует заключать в кавычки:
   require   "myfile.pl";
Если аргумент EXPR является словом без суффиксов, не заключенным в кавычки, то директива require предполагает, что оно имеет суффикс ".pm", чтобы облегчить загрузку стандартных модулей, имеющих расширение ".рm".

    На следующем шаге мы рассмотрим создание и подключение библиотечного файла.




Предыдущий шаг Содержание Следующий шаг