[Pdx-pm] [build in defaults to method calls from the outside] need some help thinking thru this one

Eric Wilhelm scratchcomputing at gmail.com
Mon Jul 23 23:55:28 PDT 2007


# from benh
# on Monday 23 July 2007 05:29 pm:

>sub do_something {
>   my ( $self ) = @_;
>   return $self->{bi}->do_something($self->{isbn});
>}
>
>It works, but it seems needlessly messy. What I would like to do is to
>have some way to specify that all calls made to SingleBook that dont
>exits should then get passed to BookInfo with the know isbn.

You could do it with AUTOLOAD, but if you *can* declare the keys, that's 
probably better.  That is, make a list and generate all of the methods 
at compile-time.

You could even use Class::Accessor or Class::Accessor::Classy and just 
declare the getter.

http://scratchcomputing.com/svn/Class-Accessor-Classy/trunk/t/05-set-get.t

>I was thinking of doing something along these lines:
>
>if ($self->can($action) ) {
>   return $self->$action;
>} elseif ($self->{bi}->can($action) {
>   return $self->{bi}->$action($self->{isbn});
>} else {
>   die 'freakout... why are we here?';
>}

Though you should consider giving $self->{isbn} to $self->{bi}, provided 
that can be done without staleness.  Of course, I'm just itching to 
apply object-oriented functional programming to something, so why not 
curry it into some object methods?

--Eric
-- 
"...the bourgeoisie were hated from both ends: by the proles, because
they had all the money, and by the intelligentsia, because of their
tendency to spend it on lawn ornaments."
--Neal Stephenson
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------


More information about the Pdx-pm-list mailing list