use strict; use warnings; use feature qw( say ); { package ClsA; use mro 'c3'; sub foo { say __PACKAGE__; } } { package ClsB1; use mro 'c3'; our @ISA = qw( ClsA ); } { package ClsB2; use mro 'c3'; our @ISA = qw( ClsA ); sub foo { say __PACKAGE__; $_[0]->maybe::next::method() } } { package ClsB3; use mro 'c3'; our @ISA = qw( ClsA ); sub foo { say __PACKAGE__; $_[0]->maybe::next::method() } } { package ClsD; use mro 'c3'; our @ISA = qw( ClsB1 ClsB2 ClsB3 ); } ClsD->foo(); say "--"; ClsB2->foo(); #### ClsB2 ClsB3 ClsA -- ClsB2 ClsA