package _Initializable; sub new { my ($self,$args); my $private_stuff = "private"; my $class_data = { do stuff here "class_data" => $private_stuff}; bless $class_data, ref($class)||$class; $self->_init($args); # pass them back to the calling mod } #### use _Initializable; package Caller; # suck "new" in from _Initializable, along with our # data private to object Caller when we call # $foo=Caller->new($arg) elsewhere @Caller::ISA = qw(_Initializable); # no "new" constructor in any of our stuff... we use _init # to do "construction" # now so that we inherit from _initializable # obviously if you want to provide a class method in # _Initializable for the private data, that wouldn't be too # difficult. sub _init { my ($self,$arg) = @_; do other stuph return $self; }