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

Re: On Pseudohashes

From:
Tom Christiansen
Date:
January 17, 2000 06:09
Subject:
Re: On Pseudohashes
Message ID:
6636.948118132@chthon
>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?  If there some obvious advantage to using AUTOLOAD
over, say, iterated registration of closures in the package symbol
table?  In my libertine youth, I would frequently advocate AUTOLOAD
to cover generic accessor methods, but in later years I've grown
to mistrust in the extreme that particular strategy for realistically
complex class hierarchies.

--tom



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