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–2021 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.36.0/autouse