Spec-Zone.ru › Perl 5.32

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.30.3/autouse

Spec-Zone.ru

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