Anansi-Singleton
view release on metacpan or search on metacpan
lib/Anansi/Singleton.pm view on Meta::CPAN
See L<Anansi::Class::used|Anansi::Class/"used"> for details.
=cut
=head3 uses
See L<Anansi::Class::uses|Anansi::Class/"uses"> for details.
=cut
=head3 using
See L<Anansi::Class::using|Anansi::Class/"using"> for details.
=cut
=head2 DESTROY
=over 4
=item self I<(Blessed Hash, Required)>
An object of this namespace.
=back
Overrides L<Anansi::Class::DESTROY|Anansi::Class/"DESTROY">. Performs module
object instance clean-up actions. Either calls the
L<fixate|Anansi::Singleton/"fixate"> method prior to dereferencing an instance
of the object where more than one instance exists or the
L<finalise|Anansi::Class/"finalise"> method prior to dereferencing the last
instance. Indirectly called by the perl interpreter.
=cut
sub DESTROY {
my ($self) = @_;
my $objectManager = Anansi::ObjectManager->new();
if(1 == $objectManager->registrations($self)) {
$self->finalise();
$objectManager->obsolete(
USER => $self,
);
$objectManager->unregister($self);
} elsif(1 < $objectManager->registrations($self)) {
$self->fixate();
$objectManager->unregister($self);
}
}
=head2 fixate
$OBJECT->fixate();
$OBJECT->SUPER::fixate();
=over 4
=item self I<(Blessed Hash, Required)>
An object of this namespace.
=item parameters I<(Hash, Optional)>
Named parameters.
=back
A virtual method. Called just prior to module instance object destruction where
there are multiple instances of the object remaining.
=cut
sub fixate {
my ($self, %parameters) = @_;
}
=head2 new
my $object = Anansi::Example->new();
my $object = Anansi::Example->new(
SETTING => 'example',
);
=over 4
=item class I<(Blessed Hash B<or> String, Required)>
Either an object or a string of this namespace.
=item parameters I<(Hash, Optional)>
Named parameters.
=back
Overrides L<Anansi::Class::new|Anansi::Class/"new">. Instantiates or
reinstantiates an object instance of a module. Either calls the
L<initialise|Anansi::Class/"initialise"> method with the supplied I<parameters>
after the object is first instantiated or the
L<reinitialise|Anansi::Singleton/"reinitialise"> method after subsequent
instantiations.
=cut
sub new {
my ($class, %parameters) = @_;
return if(ref($class) =~ /^(ARRAY|CODE|FORMAT|GLOB|HASH|IO|LVALUE|REF|Regexp|SCALAR|VSTRING)$/i);
$class = ref($class) if(ref($class) !~ /^$/);
if(!defined($NAMESPACE->{$class})) {
my $self = {
NAMESPACE => $class,
PACKAGE => __PACKAGE__,
};
$NAMESPACE->{$class} = bless($self, $class);
my $objectManager = Anansi::ObjectManager->new();
$objectManager->register($NAMESPACE->{$class});
$NAMESPACE->{$class}->initialise(%parameters);
} else {
my $objectManager = Anansi::ObjectManager->new();
$objectManager->register($NAMESPACE->{$class});
$NAMESPACE->{$class}->reinitialise(%parameters);
}
return $NAMESPACE->{$class};
}
=head2 reinitialise
$OBJECT->reinitialise();
$OBJECT->SUPER::reinitialise();
=over 4
=item self I<(Blessed Hash, Required)>
An object of this namespace.
=item parameters I<(Hash, Optional)>
Named parameters.
=back
A virtual method. Called just after module instance object recreation.
=cut
sub reinitialise {
my ($self, %parameters) = @_;
}
=head1 NOTES
This module is designed to make it simple, easy and quite fast to code your
design in perl. If for any reason you feel that it doesn't achieve these goals
then please let me know. I am here to help. All constructive criticisms are
also welcomed.
=cut
=head1 AUTHOR
Kevin Treleaven <kevin I<AT> treleaven I<DOT> net>
=cut
1;
( run in 2.277 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )