MooseX::Singleton.3pm

Langue: en

Version: 2009-09-12 (fedora - 01/12/10)

Section: 3 (Bibliothèques de fonctions)

NAME

MooseX::Singleton - turn your Moose class into a singleton

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.

If you need to reset your class's singleton object for some reason (e.g. tests), you can call "YourPackage->_clear_instance".

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.

AUTHORS

Shawn M Moore <sartak@gmail.com>

Dave Rolsky <autarch@urth.org>

SOME CODE STOLEN FROM

Anders Nor Berle <debolaz@gmail.com>

AND PATCHES FROM

Ricardo SIGNES <rjbs@cpan.org> Copyright 2007, 2008 Infinity Interactive

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.