#!/usr/bin/perl package TOP::TEST; sub new { my $class = shift; my $self = {@_}; $self->{'thing'}->{'var_1'} = 'this changed'; $self->{'thing'}->{'var_3'} = 'other thing'; bless $self, $class; return $self; } package TOP::TEST::EXTENDONE; sub new { my $class = shift; my $self = {@_}; $self->{'thing'}->{'var_1'} = 'this changed'; $self->{'thing'}->{'var_3'} = 'other thing'; bless $self, $class; return $self; } sub print_one { my ($self) = @_; return 'FROM ONE: '.$self->{'thing'}->{'var_1'}; } package TOP::TEST::EXTENDTWO; sub new { my $class = shift; my $self = {@_}; $self->{'thing'}->{'var_3'} = 'other thing changed'; bless $self, $class; return $self; } package main; #### For this example added them to this file #use TOP::TEST; #use TOP::TEST::EXTENDONE; #use TOP::TEST::EXTENDTWO; # at any point there might be an EXTENDTHREE, or EXTENDFOUR when needed # # this how it works now. But feels wrong for some reason my $thing = new TOP::TEST( var_1 => 'this', var_2 => 'that'); my $one = new TOP::TEST::EXTENDONE( thing=> $thing,something=> 'extra' ); my $two = new TOP::TEST::EXTENDTWO( thing=> $thing ); # this would be ideal with automatic inheritence in the packages... but # can seem to get it done correctly. # Need some wisdom :( #my $thing = new TOP::TEST( var_1 => 'this', var_2 => 'that', something=>'extra'); print 'var_1 changed: '.$thing->{'var_1'}."\n"; print 'var_2: '.$thing->{'var_2'}."\n"; print 'var_3: '.$thing->{'var_3'}."\n"; print 'var_1 from $one: '.$one->print_one()."\n"; #### use TOP::TEST; use TOP::TEST::EXTENDONE; use TOP::TEST::EXTENDTWO; my $thing = new TOP::TEST( var_1 => 'this', var_2 => 'that', something=>'extra'); # This is imported into the base class from EXTENDONE print $thing->print_one()."\n"; print $thing->{'var_3'}."\n";