use、require、use base

1 都是引入模块,语法:
       use ModuleName;
       require ModuleName;
   ModuleName 不必加pm扩展名
 
2 区别之一,use语句是编译时引入的,require是运行时引入的。
 
 
3 区别之二,use语句所做的事情比require要多一点点,一条
         use ModuleName;
语句大致相当于
         require ModuleName;
         import  ModuleName::(@EXPORT);
上面两句的内容。
也就是说,哪怕只用 use ModuleName,当前包的命名空间都会被ModuleName中的@EXPORT中的函数和变量“玷污”,好处是使用 ModeleName中的函数和变量不不必加包前缀 Modelename::
 
4 如果要use 语句不会“玷污”当前的包命名空间,直接用
         use ModuleName () #一个空括号
就行了,这不表示不能用ModuleName的函数和变量,只是用时需要加包前缀,如
    $xyz = ModuleName::function1();
 
5 有时除了引入默认的@EXPORT中的函数和变量,还可以引入附加的函数和变量,这个列表定义在ModuleName 的@EXPORT_OK数组中。可以用
 
     use ModuleName (@EXPORT_OK的一个片段)
 
这样的方式来引入
 
6 用use能在编译时就发现问题,用use是未来的趋势


use base 是面向对象编程时,用来描述“基类”的,其实说白了,


use base somemodule;
就相当于以下两句的结合:

BEGIN{
    use somemodule ();
    push @ISA, qw(somemodule);
}
也可以同时 use base 两个或者两个以上的模块,例如:

use base qw(Foo Bar);
就相当于:

BEGIN {
    use Foo ();
    use Bar ();
    push @ISA, qw(Foo Bar);
}
至于 @ISA 是个什么样的数组,这完全不关 use base 的事,
只不过,@ISA 是一个比较特殊的数组,它的含义可以参见大骆驼中的描述。

顺便说一下,


use Foo ();

use Foo;
是不同的,
后者会自动调用 Foo 包里的 import 函数,而前者不会。

use base somemodule;

use somemodule;
多了并且只多了一句
push @ISA, qw(somemodule);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值