- 论坛徽章:
- 0
|
其实有代表性的代码比文字更好解释。
package test1;
sub new{
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = {};
bless $self, $class;
return $self;
}
sub ShowME {
return "Test1\n";
}
package test2;
sub oddness {
my $class = 'test1';
my $self = {};
bless $self, $class;
return $self;
}
sub createme {
shift;
my $self = {};
$self->{CALLBACK} = shift || sub {print "In call test2\n"};
return bless $self;
}
sub ShowME {
my $self = shift;
$self->{CALLBACK}();
return "Test2\n";
}
package test3;
sub build {
my $self = [];
push @{$self}, sub {print shift,"\n"};
bless $self;
return $self;
}
sub ShowME{
my $self = shift;
print "Me store: @$self\n";
$self->[0]('in test3 ShowME call.');
return "Test3\n";
}
package main;
my $t1=test1->new();
print $t1->ShowME;
my $t20=test2->oddness;
print "I call package test2? ",$t20->ShowME;
my $t21=test2->createme;
# 注释/不注释下面一行看不同结果
#$t21->{CALLBACK} = sub {print "Call outside.\n";};
print $t21->ShowME;
my $t3=test3->build;
push @$t3,'+++';
$t3->[0]('in main call.');
print $t3->ShowME();
__END__
上面能说好大一篇了,其实知识就是这样‘试’出来的,想解释的都试试? |
|