Spec-Zone.ru › Perl 5.38

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–2023 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.38.0/autouse

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API