+---------+ +---------+ +---------+ | Filter | | Safe | | Base | +---------+ +---------+ +---------+ | | | +------------------+------------------+ v +-------------+ | Safe_Filter | @ISA=qw(Filter Safe Base); +-------------+ #### BEGIN { push @MIXIN, "#line ".__LINE__.' "'.__FILE__.'"', "", <<'/' } sub compile { eval { local $SIG{__DIE__}; (shift)->SUPER::compile( @_) }; } / #### sub compile { eval { local $SIG{__DIE__}; (shift)->NEXT('compile', @_) }; } #### 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" ); }