sub run { my ($self) = @_; ... do stuff with $self ... } # In user Class->new(...)->run(); #### sub run { my $class = shift; my $obj = $class->new(@_); ... do stuff with $obj ... } # In user Class->run(...); #### sub run { my $class = shift; $class->new(@_)->_run(); } sub _run { my ($self) = @_; ... do stuff with $self ... } # In user Class->run(...);