my $instanceC = CLASS_C->new(); $instanceC->method_from_class_A(); #### package CLASS_C; use CLASS_B; @ISA = ('CLASS_B'); use strict; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; $self->{attribut} = 1; $self = $class->SUPER::new(self => $self); return $self; } 1; #### package CLASS_B; use CLASS_A; @ISA = ('CLASS_A'); use strict; sub new { my $proto = shift; my (%params) = @_; my $class = ref($proto) || $proto; my $self = $class->SUPER::new(); foreach my $attr (keys %{$params{'self'}}) { $self->{$attr} = $params{'self'}->{$attr}; } return $self; } 1; #### package CLASS_A; use strict; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; bless($self,$class); return $self; } 1;