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; }