使用Modulename之间的区别; 并使用Modulename();

ado*_*ado 6 perl

Modulename之间有什么区别; 并使用Modulename(); ?有时我会看到,例如,使用鲤鱼; 有时使用Carp();

ike*_*ami 11

记载,

use Modulename;
Run Code Online (Sandbox Code Playgroud)

是基本相同的

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

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

是基本相同的

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

这意味着parens指定您不想导入任何内容.(这也会阻止一个pragma做它的工作.)


鲤鱼出口confess,croak并且carp在默认情况下,所以

use Carp;
Run Code Online (Sandbox Code Playgroud)

是的缩写

use Carp qw( confess croak carp );
Run Code Online (Sandbox Code Playgroud)

通过使用

use Carp ();   # or: use Carp qw( );
Run Code Online (Sandbox Code Playgroud)

confess,croak并且carp不会被添加到调用者的名称空间中.他们仍然可以通过他们的完全限定名称获得.

use Carp ();
Carp::croak(...);
Run Code Online (Sandbox Code Playgroud)


Mar*_*eed 5

如果没有()import将调用包的方法,这可能会导致一些默认名称集被导出到调用包的命名空间中。

()明确传递“不要将任何名称导入我的命名空间”。

大多数现代面向对象模块在默认情况下不会导出任何内容,如果他们愿意,也没有什么可以阻止它们手动污染调用者的命名空间,但是指定()是一个信号,表明您不会仅仅因为导入而依赖于神奇地出现的名称一袋。