sub NEXT { my ( $self, $method, @args ) = @_; my $calling_package = caller(0); my @classes = ref($self) || $self; my @isa; while ( my $class = shift @classes ) { push @isa, $class; no strict; unshift @classes, @{ $class . "::ISA" }; } while ( my $class = shift @isa ) { last if ( $class eq $calling_package ) } while ( my $class = shift @isa ) { next unless my $sub = $class->can( $method ); return &$sub( $self, @args ); } Carp::croak( "Can't find NEXT method" ); }