/usr/share/perl5/Apache/Singleton.pm is in libapache-singleton-perl 0.07-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | package Apache::Singleton;
use strict;
use vars qw($VERSION);
$VERSION = '0.07';
BEGIN {
my $delegator = sprintf 'Apache::Singleton::%s',
$ENV{MOD_PERL} ? 'Request' : 'Process';
eval qq{require $delegator};
sub _delegator { $delegator }
}
sub instance {
my $class = shift;
my $instance = $class->_get_instance;
unless (defined $instance) {
$instance = $class->_new_instance(@_);
$class->_set_instance($instance);
}
return $instance;
}
sub _new_instance {
bless {}, shift;
}
# Abstract methods, but compatible default
sub _get_instance {
my $class = shift;
my $delegate = sprintf '%s::_get_instance', $class->_delegator;
$class->$delegate(@_);
}
sub _set_instance {
my $class = shift;
my $delegate = sprintf '%s::_set_instance', $class->_delegator;
$class->$delegate(@_);
}
1;
__END__
=head1 NAME
Apache::Singleton - Singleton class for mod_perl
=head1 SYNOPSIS
package Printer;
# default:
# Request for mod_perl env
# Process for non-mod_perl env
use base qw(Apache::Singleton);
package Printer::PerRequest;
use base qw(Apache::Singleton::Request);
package Printer::PerProcess;
use base qw(Apache::Singleton::Process);
=head1 DESCRIPTION
Apache::Singleton works the same as Class::Singleton, but with
various object lifetime (B<scope>). See L<Class::Singleton> first.
=head1 OBJECT LIFETIME
By inheriting one of the following sublasses of Apache::Singleton,
you can change the scope of your object.
=over 4
=item Request
use base qw(Apache::Singleton::Request);
One instance for one request. Apache::Singleton will remove instance
on each request. Implemented using mod_perl C<pnotes> API. In mod_perl
environment (where C<$ENV{MOD_PERL}> is defined), this is the default
scope, so inheriting from Apache::Singleton would do the same effect.
=item Process
use base qw(Apache::Singleton::Process);
One instance for one httpd process. Implemented using package
global. In non-mod_perl environment, this is the default scope, and
you may notice this is the same beaviour with Class::Singleton ;)
So you can use this module safely under non-mod_perl environment.
=back
=head1 AUTHOR
Original idea by Matt Sergeant E<lt>matt@sergeant.orgE<gt> and Perrin
Harkins E<lt>perrin@elem.comE<gt>.
Code by Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt>.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
L<Apache::Singleton::Request>, L<Apache::Singleton::Process>,
L<Class::Singleton>
=cut
|