#!/usr/bin/perl package Agent; use _Initialize; @ISA = qw( _Initialize tools ); sub _init { my ($self, %args) = @_; $self->tools::_init(%args); #$self->PunMeister::_init(%args); $self->{_acolytes} = $args{followers}; $self->{_philosophy} = $args{manifesto}; } sub DESTROY { my ($self) = @_; print "pg dtor\n"; no strict "refs"; foreach my $parent ( @{ref($self)."::ISA"} ) { my $destructor = $parent."::DESTROY"; $self->$destructor(); } } 1; #### package _Initialize; use strict; sub new { my ($class, %args) = @_; my $self = bless {}, ref($class)||$class; $self->_init(%args); return $self; } sub DESTROY {} 1; #### #!/usr/bin/perl package tools; @ISA = qw( _Initialize ); sub _init { my ($self, %args) = @_; $self->{_name} = $args{name}; $self->{_alias} = $args{moniker}; $self->{_langs} = $args{languages}; } 1; #### #!/usr/bin/perl use Data::Dumper; use Agent; my $config = Agent->new(); print Dumper($config);