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)
如果没有(),import将调用包的方法,这可能会导致一些默认名称集被导出到调用包的命名空间中。
()明确传递“不要将任何名称导入我的命名空间”。
大多数现代面向对象模块在默认情况下不会导出任何内容,如果他们愿意,也没有什么可以阻止它们手动污染调用者的命名空间,但是指定()是一个信号,表明您不会仅仅因为导入而依赖于神奇地出现的名称一袋。