use base是什么意思?

use base是什么意思?

use base somemodule;
use somemodule;有什么区别?英文文档没看明白。

    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; 又怎么理解呢?那个S是什么意思?
谢谢!
use base 是面向对象编程时,用来描述“基类”的,其实说白了,

[Copy to clipboard] [ - ]
CODE:
use base somemodule;

就相当于以下两句的结合:

[Copy to clipboard] [ - ]
CODE:
BEGIN{
    use somemodule ();
    push @ISA, qw(somemodule);
}

也可以同时 use base 两个或者两个以上的模块,例如:

[Copy to clipboard] [ - ]
CODE:
use base qw(Foo Bar);

就相当于:

[Copy to clipboard] [ - ]
CODE:
BEGIN {
    use Foo ();
    use Bar ();
    push @ISA, qw(Foo Bar);
}

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

顺便说一下,

[Copy to clipboard] [ - ]
CODE:
use Foo ();



[Copy to clipboard] [ - ]
CODE:
use Foo;

是不同的,
后者会自动调用 Foo 包里的 import 函数,而前者不会。
谢谢,明白一点,
那use base somemodule;和use somemodule是一个意思了?


QUOTE:
原帖由 dajun 于 2006-5-24 11:26 发表
谢谢,明白一点,
那use base somemodule;和use somemodule是一个意思了?

你这人怎么这样啊。不是跟你说了嘛,

[Copy to clipboard] [ - ]
CODE:
use base somemodule;



[Copy to clipboard] [ - ]
CODE:
use somemodule;

多了并且只多了一句

[Copy to clipboard] [ - ]
CODE:
push @ISA, qw(somemodule);

嘛!
我以为import函数代替了push ◎ISA, somemodule呢


QUOTE:
原帖由 dajun 于 2006-5-24 12:09 发表
我以为import函数代替了push ◎ISA, somemodule呢

那倒不会,
虽然说 Perl 没有不允许这么做,
但是在开源精神下,很少有程序员会在 import 函数中修改 caller 的 @ISA 值。
我也明白了, 谢谢了。觉得莫愁 很好玩
呵呵,不是很习惯perl的oo编程啊
唉,简单来说就是“继承”。@ISA还是比较难以理解的