package Action; sub new { my ($class, %args) = @_; my $coderef = sub { while (my ($k, $v) = each(%args)) { ... } }; return bless($coderef, $class); } sub foo { $_[0]->(); } #### package SingletonObject; { my $instance; sub instance { unless (defined $instance) { $instance = bless ({}, $class); # other initialization stuff } return $instance; } }