在Perl中,加载模块的使用和要求之间有什么区别?

Sam*_*Lee 27 perl module require

use My::Module和有require My::Module什么区别?

Cha*_*ens 30

use函数:

use ModuleName;
Run Code Online (Sandbox Code Playgroud)

使用该require函数等效于以下代码:

BEGIN {
    require ModuleName;
    ModuleName->import;
}
Run Code Online (Sandbox Code Playgroud)

BEGIN块会在解析器看到它时立即运行此代码.该require加载模块或die在试着.然后import调用模块的功能.该import函数可以执行各种操作,但通常将函数加载到命名空间use(通常使用Exporter模块).

请注意,在这种情况下不会调用import:

use ModuleName ();
Run Code Online (Sandbox Code Playgroud)

在那种情况下,它相当于

BEGIN {
    require ModuleName;
}
Run Code Online (Sandbox Code Playgroud)


Sil*_*rom 17

perldoc -q"需求和使用之间的差异":

use Module就像require Module,除了那个use

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

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


Sin*_*nür 10

Perl附带了很棒的文档.每隔几个月至少阅读一次整个文档,每个人都会受益.

C:\> perldoc -f require

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

......等等,

C:\> perldoc -f use

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

BEGIN { require Module; Module->import( LIST ); }
Run Code Online (Sandbox Code Playgroud)

除了Module必须是一个裸字.

......等

还有perlfaq条目,虽然我认为它比上述信息量少.


180*_*ION 7

use在编译时require运行,并在运行时运行.

  • 不要忘记调用`import`. (3认同)
  • 这是他们在Perl测试和求职面试中寻找的答案.你需要记住这个! (2认同)