package Baz; BEGIN { require Foo; require Bar; push @ISA, qw(Foo Bar); } #### my $object = MyClass->new; print $object->name; print $object->{'name'}; #### package MyClass; use strict; use vars qw/$MUSTHAVEONLYONEINSTANCE/; $MUSTHAVEONLYONEINSTANCE = 0; ... sub new { return undef if $MUSTHAVEONLYONEINSTANCE; $MUSTHAVEONLYONEINSTANCE = 1; ... } sub DESTROY { $MUSTHAVEONLYONEINSTANCE = 0; }