Первый сайт на 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;

• имена библиотечных каталогов по умолчанию (зависят от операционной системы);

• символическое обозначение текущего каталога ".".

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




Содержание  Назад  Вперед