Шаг 127.
Пакеты. Автозагрузка

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

    При попытке обратиться к функции из некоторого пакета, которая в нем не определена, интерпретатор завершает работу с выдачей сообщения об ошибке. Если же в этом пакете определить функцию с именем AUTOLOAD, то при вызове из пакета несуществующей функции вместо нее будет вызвана функция AUTOLOAD с параметрами, переданными при вызове несуществующей функции. При этом интерпретатор perl продолжает выполнение программы. Полное имя несуществующей функции с указанием имени пакета сохраняется в переменной $AUTOLOAD из того же пакета, что и функция AUTOLOAD. Например, для основного пакета main можно определить функцию AUTOLOAD, как в следующем примере.

#! perl -w
sub AUTOLOAD
{
  print  "Функция $AUTOLOAD не  определена\n";
}
print "Начало работы\n";
f();
print "Конец работы\n";
Текст этого примера можно взять здесь.

    Функция f(), в отличие от функции AUTOLOAD, не определена в пакете main, поэтому в результате выполнения данной программы будут выведены сообщения:


Рис.1. Результат работы скрипта

    Этот пример достаточно тривиальный, но он дает представление об использовании функции AUTOLOAD. В состав дистрибутива Perl входят стандартные модули, многие из которых содержат собственные, достаточно сложные определения функции AUTOLOAD, которые можно рассмотреть в качестве более сложного примера.

    Со следующего шага мы начнем рассматривать библиотеки.




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