[OT] Wrapping methods
Luis Motta Campos
luismottacampos at yahoo.co.uk
Tue Jul 7 10:56:06 BST 2009
David Cantrell wrote:
> On Mon, Jul 06, 2009 at 05:06:03PM +0100, Nicholas Clark wrote:
>
>> but Generic::Base::ClassWithTimeout has done something funky to
>> wrap &run in a routine that does the eval block/alarm/$SIG{ALARM}
>> handler? Basically, the fun is that I'd like to do something
>> equivalent to invert the order of inheritance, such that the
>> parent's &run seems to be called first, and it can "SUPER" delegate
>> to its child.
>
> You can't use inheritance for this. You need to detect whenever a
> class is loaded - perhaps by doing some Voodoo in @INC or %INC. Then
> to figure out which classes inherit from your class, use
> Class::CanBeA, and then Hook::LexWrap or something similar to wrap
> its run() method.
I second that.
> It sounds like this would be terribly fragile though. eg, if run()
> is AUTOLOADed or otherwise defined at runtime.
Good practices dictate that whenever you provide AUTOLOADed methods, you
should also override UNIVERSAL::can() to provide proper information
about the AUTOLOADable methods.
If you have reasonable control over the implementation, I would dare to
contradict David and state that fragility is not a big deal.
My €0.02
--
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.
More information about the london.pm
mailing list