develooper Front page | perl.perl5.porters | Postings from January 2000

Re: On Pseudohashes

Thread Previous | Thread Next
From:
Graham Barr
Date:
January 17, 2000 06:28
Subject:
Re: On Pseudohashes
Message ID:
20000117142638.R887@pobox.com
On Mon, Jan 17, 2000 at 07:08:52AM -0700, Tom Christiansen wrote:
> >It's always been advisable for classes to pre-declare all their methods
> >if using AUTOLOAD.
> 
> Tim, some time ago something came up about autoloading method calls
> that bothered me in an MI scenario.  Seems to me you respondedi
> similarly then.  I'm pretty sure it was the following inheritance
> scenario:
> 
>                 A
>                  \
>                   B   C         @B::ISA = ('A');
>                    \ /
>                     D           @D::ISA = ('B', 'C');
> 
> Suppose that each of those classes were using autoloading to generate
> its attribute accessors.  If D->m() is called, and that method m()
> is really supposed to be handled iby C, there's no way for B's
> autoload to "super" it over to C.  Instead, B::SUPER just gets to
> ascend to A--which doesn't help.  You can never renege on an AUTOLOAD
> so that Perl's method lookup would treat that hit as a miss and
> then go on to inspect sibling branches of the tree.
> 
> Does pre-declaring methods to be handled via AUTOLOAD entirely clear
> this matter up? 

Yes. If C had declared

sub m;

Then during the initial method lookup it would be found and AUTOLOAD
would be called in C, and so B::AUTOLOAD would never get called.


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About