另外,分享一篇好文:

http://www.stonehenge.com/merlyn/PerlJournal/col04.html

2010/4/12 cnhack TNT <[email protected]>

> *print '[', $self->name, " is being destroyed...]\n";
> *
> 猜你的本意是:
>
> * print '[', ref $self, " is being destroyed...]\n";
>
> 改成如上这样就OK了,这是因为 $self 此时是 Barn, 没有 name 这个方法,直接就异常退出了。*
>
>
>
> 2010/4/8 andy white <[email protected]>
>
> { package Animal;
>> sub name {
>>  my $either = shift;
>>  ref $either
>> ? $either->{Name}
>> : "an unnamed $either";
>>  }
>> sub named {
>> my $class = shift;
>>  my $name = shift;
>> my $self = { Name => $name, Color => $class->default_color };
>>  bless $self, $class;
>> }
>>
>> sub default_color { 'brown' }
>>  sub DESTROY {
>> my $self = shift;
>> print '[', $self->name, " has died.]\n";
>>  }
>> }
>> { package Cow;
>> @ISA = qw( Animal );
>> }
>> { package Barn;
>> sub new { bless [ ], shift }
>> sub add { push @{+shift}, shift }
>>  sub contents { @{+shift} }
>> sub DESTROY {
>> my $self = shift;
>>  print '[', $self->name, " is being destroyed...]\n";
>> for($self->contents) {
>>  print ' ', $_->name, " goes homeless.\n";
>> }
>> }
>> }
>>
>> my $barn = Barn->new;
>> $barn->add(Cow->named('Bessie'));
>> $barn->add(Cow->named('Gwen'));
>> print "Burn the barn:\n";
>> $barn = undef;
>> print "End of program.\n";
>>
>> 现在的程序的运行结果的是:
>> Burn the barn:
>> [Gwen has died.]
>> [Bessie has died.]
>> End of program.
>>
>> 当$barn = undef时,调用的是Animal的DESTROY方法。
>>
>> 我想要的结果是还要调用Barn的DESTROY方法(并且打印contents的内容),即
>> Burn the barn:
>> Barn=ARRAY(0x541c) is being destroyed...
>>   Bessie goes homeless.
>>   Gwen goes homeless.
>> [Gwen has died.]
>> [Bessie has died.]
>> End of program.
>>
>> 问题出在那里阿?那位帮忙看看吧!
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
>> 要取消订阅此网上论坛,请发送电子邮件至 
>> [email protected]<perlchina%[email protected]>
>> 。
>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>
>
>

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

回复