use Class::Maker qw(:all); class 'Zoo', { public => { array => [qw( animals )], } }; class 'Animal', { public => { string => [qw( name )], } }; class 'Camel', { isa => [qw( Animal )], }; class 'Lama', { isa => [qw( Animal )], }; my $z = Zoo->new(); push @{ $z->animals }, Camel->new( name => 'Murat' );