perl里面隐式的继承

隐式的继承
今天看见某断代码:

A.pm

Package A;

...

sub test{
        print "test\n";
}
B.pm

Package B;
use A;

B->test();
觉得比较奇怪,B并未显式从A继承,何以能使用A的test函数

最后发现A.pm里面重写了import函数

sub import{
        my $class = $_[0];
        my $caller = caller(0);
        unless($caller->isa('A')){
               
                no strict 'refs';
                print "importing A\n";
                push @{"$caller\::ISA"}, $class;

        }
       
}
这里的caller是指调用栈,caller(0)为最顶层的PACKAGE名,由于B调用A的import,所以为'B'
B::ISA为父类数组
posted @ 2007-12-03 10:21  荖K  阅读(306)  评论(0编辑  收藏  举报