NAME MooseX::Singleton - turn your Moose class into a singleton VERSION Version 0.16 SYNOPSIS package MyApp; use MooseX::Singleton; has env => ( is => 'rw', isa => 'HashRef[Str]', default => sub { \%ENV }, ); package main; delete MyApp->env->{PATH}; my $instance = MyApp->instance; my $same = MyApp->instance; DESCRIPTION A singleton is a class that has only one instance in an application. "MooseX::Singleton" lets you easily upgrade (or downgrade, as it were) your Moose class to a singleton. All you should need to do to transform your class is to change "use Moose" to "use MooseX::Singleton". This module uses a new class metaclass and instance metaclass, so if you're doing metamagic you may not be able to use this. "MooseX::Singleton" gives your class an "instance" method that can be used to get a handle on the singleton. It's actually just an alias for "new". Alternatively, "YourPackage->method" should just work. This includes accessors. TODO Always more tests and doc Fix speed boost "instance" invokes "new" every time "Package->method" is called, which incurs a nontrivial runtime cost. I've implemented a short-circuit for this case, which does eliminate nearly all of the runtime cost. However, it's ugly and should be fixed in a more elegant way. BUGS All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT. AUTHOR Shawn M Moore SOME CODE STOLEN FROM Anders Nor Berle AND PATCHES FROM Ricardo SIGNES Dave Rolsky COPYRIGHT AND LICENSE Copyright 2007, 2008 Shawn M Moore. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.