#!/usr/bin/perl use strict; use warnings; use NEXT; { package A; sub method { print "$_[0]: A method\n"; $_[0]->NEXT::method() }; sub DESTROY { print "$_[0]: A dtor\n"; $_[0]->NEXT::DESTROY() }; } { package B; use base qw( A ); sub AUTOLOAD { print "$_[0]: B AUTOLOAD\n"; $_[0]->NEXT::AUTOLOAD() }; sub DESTROY { print "$_[0]: B dtor\n"; $_[0]->NEXT::DESTROY() }; } { package C; sub method { print "$_[0]: C method\n"; $_[0]->NEXT::method() }; sub AUTOLOAD { print "$_[0]: C AUTOLOAD\n"; $_[0]->NEXT::AUTOLOAD() }; sub DESTROY { print "$_[0]: C dtor\n"; $_[0]->NEXT::DESTROY() }; } { package D; use base qw( B C ); sub method { print "$_[0]: D method\n"; $_[0]->NEXT::method() }; sub AUTOLOAD { print "$_[0]: D AUTOLOAD\n"; $_[0]->NEXT::AUTOLOAD() }; sub DESTROY { print "$_[0]: D dtor\n"; $_[0]->NEXT::DESTROY() }; } package main; my $obj = bless {}, "B"; $obj->method(); #### #!/usr/bin/perl use strict; use warnings; use NEXT; { package A; sub method { print "$_[0]: A method\n"; $_[0]->NEXT::method() }; sub DESTROY { print "$_[0]: A dtor\n"; $_[0]->NEXT::DESTROY() }; } { package C; sub method { print "$_[0]: C method\n"; $_[0]->NEXT::method() }; sub AUTOLOAD { print "$_[0]: C AUTOLOAD\n"; $_[0]->NEXT::AUTOLOAD() }; sub DESTROY { print "$_[0]: C dtor\n"; $_[0]->NEXT::DESTROY() }; } { package D; use base qw( B C ); sub method { print "$_[0]: D method\n"; $_[0]->NEXT::method() }; sub AUTOLOAD { print "$_[0]: D AUTOLOAD\n"; $_[0]->NEXT::AUTOLOAD() }; sub DESTROY { print "$_[0]: D dtor\n"; $_[0]->NEXT::DESTROY() }; } { package B; use base qw( A ); sub AUTOLOAD { print "$_[0]: B AUTOLOAD\n"; $_[0]->NEXT::AUTOLOAD() }; sub DESTROY { print "$_[0]: B dtor\n"; $_[0]->NEXT::DESTROY() }; } package main; my $obj = bless {}, "B"; $obj->method();