autouse
СОДЕРЖАНИЕ
ИМЯ
autouse — отложить загрузку модулей до использования функции
СИНТАКСИС
use autouse 'Carp' => qw(carp croak);
carp "this carp was predeclared and autoused "; ОПИСАНИЕ
Если модуль Module уже загружен, то объявление
use autouse 'Module' => qw(func1 func2($;$)); эквивалентно
use Module qw(func1 func2); если Module определяет func2() с прототипом ($;$), а func1() не имеет прототипов. (По крайней мере, если Module использует Exporter's import, в противном случае это ошибка.)
Если модуль Module ещё не загружен, то вышеприведённое объявление объявляет функции func1() и func2() в текущем пакете. При вызове этих функций они загружают пакет Module при необходимости и заменяют сами себя правильными определениями.
ПРЕДУПРЕЖДЕНИЕ
Использование autouse перенесёт важные этапы выполнения вашей программы из времени компиляции в время выполнения. Это может
-
Прервать выполнение вашей программы, если модуль, который вы
autouseли, имеет какую-то инициализацию, которую он ожидает выполнить рано. -
Скрыть ошибки в вашем коде, так как важные проверки (например, правильность прототипов) переносятся из времени компиляции в время выполнения. В частности, если прототип, который вы указали на
autouseстроке, неверный, вы об этом не узнаете, пока соответствующая функция не будет выполнена. Это будет очень нежелательно для функций, которые не всегда вызываются (обратите внимание, что для таких функцийautouseие даёт наибольший выигрыш, для обходного пути см. ниже).
Чтобы частично решить вторую проблему, рекомендуется писать свои скрипты так:
use Module;
use autouse Module => qw(carp($) croak(&$));
carp "this carp was predeclared and autoused "; Первая строка гарантирует, что ошибки в ваших спецификациях аргументов будут обнаружены рано. Когда вы распространяете своё приложение, вы должны закомментировать первую строку, так как это делает вторую бесполезной.
АВТОР
Илья Захаревич (ilya@math.ohio-state.edu)
СМОТРИ ТАКЖЕ
perl(1).
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.28.3/autouse