my $ONE_TRUE_INSTANCE = __PACKAGE__->new; sub new { my ($class, %args) = @_; return $ONE_TRUE_INSTANCE if ($ONE_TRUE_INSTANCE and $class eq __PACKAGE__ and !%args); # normal constructor here ... };