内容

名称

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 使用了 Exporterimport,否则将是致命错误。)

如果模块 Module 尚未加载,那么上述声明将在当前包中声明函数 func1() 和 func2()。 当这些函数被调用时,它们将根据需要加载包 Module,并将自身替换为正确的定义。

警告

使用 autouse 将把程序执行的重要步骤从编译时移动到运行时。 这可能

为了缓解第二个问题(部分),建议您像这样编写脚本

use Module;
use autouse Module => qw(carp($) croak(&$));
carp "this carp was predeclared and autoused ";

第一行确保您的参数规范中的错误能够尽早发现。当您发布应用程序时,您应该注释掉第一行,因为它会使第二行变得无用。

作者

Ilya Zakharevich ([email protected])

另请参阅

perl(1)。