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 <
[email protected]>
SOME CODE STOLEN FROM
Anders Nor Berle <
[email protected]>
AND PATCHES FROM
Ricardo SIGNES <
[email protected]>
Dave Rolsky <
[email protected]>
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.