use Modulename;
和有什么区别use Modulename();
吗?例如,有时我看到,有时我use Carp;
看到use Carp ();
问问题
148 次
4 回答
12
据记载,
use Modulename;
基本上是一样的
BEGIN {
require Modulename;
import Modulename;
}
尽管
use Modulename ();
基本上是一样的
BEGIN { require Modulename; }
这意味着括号指定您不想导入任何内容。(它也会阻止编译指示完成它的工作。)
Carp 出口confess
,默认情况下,croak
所以carp
use Carp;
简称
use Carp qw( confess croak carp );
通过使用
use Carp (); # or: use Carp qw( );
confess
,croak
并且carp
不会被添加到调用者的命名空间中。它们仍可通过其完全限定名称使用。
use Carp ();
Carp::croak(...);
于 2013-05-16T02:45:03.087 回答
5
如果没有()
,将调用包的import
方法,可能导致某些默认名称集被导出到调用包的命名空间中。
传递()
明确表示“不要将任何名称导入我的命名空间”。
大多数现代面向对象的模块默认情况下不会导出任何内容,如果他们愿意,没有什么可以阻止它们手动污染调用者的命名空间,但指定()
是一个信号,表明您不会仅仅因为您导入而依赖于神奇地出现的名称一袋。
于 2013-05-16T02:35:43.910 回答
4
如果您不想调用包的
import
方法(例如,阻止您的命名空间被更改),请显式提供空列表:use Module ();
这完全等同于
BEGIN { require Module }
于 2013-05-16T02:31:51.550 回答
3
于 2013-05-16T02:31:50.153 回答