Optimization: it's really slow to go through new_object for every access so
Shawn M Moore [Sun, 16 Dec 2007 19:11:16 +0000 (19:11 +0000)]
return the singleton if we see it already exists, which it will every
single except the first.

It's not particularly Moosey but it'll do for a first CPAN release.

lib/MooseX/Singleton/Meta/Instance.pm

index e9c2522..b78953c 100644 (file)
@@ -9,6 +9,13 @@ sub get_singleton_instance {
     my ($self, $instance) = @_;
 
     return $instance if blessed $instance;
+
+    # optimization: it's really slow to go through new_object for every access
+    # so return the singleton if we see it already exists, which it will every
+    # single except the first.
+    no strict 'refs';
+    return ${"$instance\::singleton"} if defined ${"$instance\::singleton"};
+
     return $instance->instance;
 }