Overriding object methods (sometimes)

Bradley Dean bjdean at bjdean.id.au
Mon Feb 25 17:25:33 GMT 2008


Greetings folks,

I've recently had cause to wrap LWP::UserAgent in a child class
which needs to override most public methods. In doing so I've hit up
against a problem - these requests call each other, but I only want my
child-class methods to be called when I call them.

My solution was to check the caller and respond appropriately, for
instance:

sub request {
  my ($self, @params) = @_;
  my ($package, $filename, $line) = caller();
  if ( $package eq 'LWP::UserAgent' ) {
    return $self->SUPER::request(@params);
  }
  else {
    return $self->_wrapper(\&LWP::UserAgent::request, @params)
  }
}

Where &_wrapper contains my local logic (it's taking a reference
to &LWP::UserAgent::request because it's going to call it later on).

This works fine, and isn't overly ugly, but I'm wondering if I've missed or
forgotten a nicer way to do it. :)

Any thoughts?

Cheerio,

 Brad

-- 
Bradley Dean
Software Engineer - http://bjdean.id.au/
Email: bjdean at bjdean.id.au Skype: skype at bjdean.id.au
Mobile(Aus): +61-413014395 Mobile(UK): +44-7846895073


More information about the london.pm mailing list