use strict; use warnings; use Test::More 'tests' => 2; package Base1; { use Object::InsideOut; sub base_first :Chained { shift; return(@_, __PACKAGE__); } sub der_first :Chained(bottom up) { shift; return(@_, __PACKAGE__); } } package Base2; { use Object::InsideOut qw(Base1); sub base_first :Chained { shift; return(@_, __PACKAGE__); } sub der_first :Chained(bottom up) { shift; return(@_, __PACKAGE__); } } package Base3; { use Object::InsideOut qw(Base1); sub base_first :Chained { shift; return(@_, __PACKAGE__); } sub der_first :Chained(bottom up) { shift; return(@_, __PACKAGE__); } } package Base4; { use Object::InsideOut; sub base_first { shift; return(@_, __PACKAGE__); } sub der_first { shift; return(@_, __PACKAGE__); } } package Der1; { use Object::InsideOut qw(Base2 Base3 Base4); sub base_first :Chained { shift; return(@_, __PACKAGE__); } sub der_first :Chained(bottom up) { shift; return(@_, __PACKAGE__); } } package Der2; { use Object::InsideOut qw(Base2 Base3 Base4); sub base_first :Chained { shift; return(@_, __PACKAGE__); } sub der_first :Chained(bottom up) { shift; return(@_, __PACKAGE__); } } package Reder1; { use Object::InsideOut qw(Der1 Der2); sub base_first :Chained { shift; return(@_, __PACKAGE__); } sub der_first :Chained(bottom up) { shift; return(@_, __PACKAGE__); } } package main; MAIN: { my $obj = Reder1->new(); my @top_down = $obj->base_first(); my @bot_up = $obj->der_first(); my @my_top_down = qw(Base1 Base2 Base3 Der1 Der2 Reder1); my @my_bot_up = qw(Reder1 Der2 Der1 Base3 Base2 Base1); is_deeply(\@top_down, \@my_top_down => 'List chained down'); is_deeply(\@bot_up, \@my_bot_up => 'List chained up'); } exit(0); # EOF