sub init_stuff { my $self = MyClass::_new_or_old( shift ); # Set params here return $self; } sub start_stuff { my $self = MyClass::_new_or_old( shift ); $self->{'start_called'}++; # Do lots of really neat stuff here. return $self; } sub use_stuff { my $self = MyClass::_new_or_old( shift ); if( !$self->{'start_called'} ) { $self->start_stuff(); } return $self; } 1;