Re-implementation. This uses a bit of Moose meta magic to get real singletons.
[gitmo/MooseX-Singleton.git] / lib / MooseX / Singleton / Object.pm
diff --git a/lib/MooseX/Singleton/Object.pm b/lib/MooseX/Singleton/Object.pm
new file mode 100644 (file)
index 0000000..dc04e2f
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env perl
+package MooseX::Singleton::Object;
+use Moose;
+use metaclass 'MooseX::Singleton::Meta::Class';
+
+extends 'Moose::Object';
+
+no strict 'refs';
+
+override new => sub {
+    my $class = shift;
+
+    # create exactly one instance
+    if (!defined ${"$class\::singleton"}) {
+        ${"$class\::singleton"} = super;
+    }
+
+    return ${"$class\::singleton"};
+};
+
+sub instance { shift->new }
+
+1;
+