30

use My::Module和 和有什么不一样require My::Module

4

4 回答 4

30

use功能:

use ModuleName;

等价于下面使用require函数的代码:

BEGIN {
    require ModuleName;
    ModuleName->import;
}

BEGIN块使该代码在解析器看到它时立即运行。require加载模块或die尝试。然后import调用模块的函数。该import函数可以做各种各样的事情,但它通常会将函数加载到它的命名空间中use(通常与Exporter模块一起)。

需要注意的是,在这种情况下不会调用 import:

use ModuleName ();

在这种情况下,它相当于

BEGIN {
    require ModuleName;
}
于 2009-07-21T20:54:01.877 回答
18

perldoc -q“需要和使用之间的区别”

use Module就像require Module,除了use

4.1:在编译时加载模块,而不是运行时。

4.2:将符号和语义从该包导入到当前包。

于 2009-07-21T20:42:00.340 回答
10

Perl 附带了很好的文档。每个人都将从至少每隔几个月阅读一次整个文档中受益。

C:\> perldoc -f require

否则require,如果尚未包含库文件,则要求包含该库文件。该文件是通过 do-FILE 机制包含的,它本质上只是各种 eval,但需要注意的是调用脚本中的词法变量对包含的代码是不可见的。具有类似于以下子程序的语义:

...等。同样,

C:\> perldoc -f use

将一些语义从命名模块导入当前包,通常通过将某些子例程或变量名称别名到包中。它完全等同于

BEGIN { require Module; Module->import( LIST ); }

除了 Module 必须是一个裸词。

... ETC

还有perlfaq 条目,尽管我认为它的信息量比上面的少。

于 2009-07-21T21:01:07.353 回答
7

use在编译时require运行,在运行时运行。

于 2009-07-21T20:42:21.760 回答