in reply to Intercept all object method calls with Moose

It's not the db_accessor method call that is dying, but the methodA accessor.

What you need to do is subclass My::DEF...

package My::DEF::JohnMacLane; # because it doesn't die use Moose; extends 'My::DEF'; my @make_immortal = qw( methodA methodB ); foreach my $meth (@make_immortal) { around $meth => sub { my ($orig, $self, @args) = @_; return eval { $self->$orig(@args) }; }; } 1;

The other possibility is to write a Shield class that sits in between My::ABC and My::DEF. I'm in a rush now, but I may update this post later with an example...

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^2: Intercept all object method calls with Moose
by elTriberium (Friar) on Jul 02, 2012 at 17:41 UTC

    OK, thanks, I understand that the methodA accessor call was dying, I was only wondering whether I could somehow easily intercept ALL method calls of an attribute in the calling class. In your example (which is helpful, thanks for that), it's not the calling class, but the called class which intercepts the methods.

    I'll have to think about if I want to use it this way, it's effectively a new derived class just for this. Maybe just handling it manually in the calling class (by putting an eval around each method call) is the better way to go. Thanks for your input again!