-#!/usr/bin/env perl
package MooseX::Singleton::Role::Meta::Class;
use Moose::Role;
use MooseX::Singleton::Role::Meta::Instance;
use MooseX::Singleton::Role::Meta::Method::Constructor;
+
sub existing_singleton {
my ($class) = @_;
my $pkg = $class->name;
no strict 'refs';
# create exactly one instance
- if (defined ${"$pkg\::singleton"}) {
+ if ( defined ${"$pkg\::singleton"} ) {
return ${"$pkg\::singleton"};
}
my $pkg = $class->name;
no strict 'refs';
+ no warnings 'once';
return ${"$pkg\::singleton"} = super;
};
-no Moose;
+if ( $Moose::VERSION >= 1.9900 ) {
+ override _inline_params => sub {
+ my $self = shift;
+
+ return
+ 'my $existing = do {',
+ 'no strict "refs";',
+ 'no warnings "once";',
+ '\${"$class\::singleton"};',
+ '};',
+ 'return ${$existing} if ${$existing};',
+ super();
+ };
+
+ override _inline_extra_init => sub {
+ my $self = shift;
+
+ return '${$existing} = $instance;';
+ };
+}
+
+no Moose::Role;
1;
+# ABSTRACT: Metaclass role for MooseX::Singleton
+
__END__
=pod
-=head1 NAME
-
-MooseX::Singleton::Role::Meta::Class - Metaclass role for MooseX::Singleton
-
=head1 DESCRIPTION
This metaclass role makes sure that there is only ever one instance of an