Class::Singletonを使ってSingletonなクラスを作ってみたりします。
Package Foo;
use strict;
use warnings;
use base qw(Class::Singleton);
sub _new_instance {
my $class = shift;
return bless { }, $class;
}
sub bar {
# なにか
}
1;
クライアントは、
#!/usr/bin/perl
use strict;
use warnings;
use Foo;
my $foo = Foo->instance();
$foo->bar;
という感じです。
ただ、実際には_new_instanceを呼んでしまえば余裕で複数インスタンスが作れちゃいます。とはいっても普通はそんなワンパクなことはしません。
一応、その辺を考慮したClass::StrongSingletonなんていうものも。UNIVERSAL::isa、callerとかやって、いろいろ調べてからインスタンスを生成します。でも、CPANでSingletonて名のつくモジュールで、そこまでやってるものは見当たりませんでした。Catalyst::Plugin::Singleton, Apache::SingletonとかもClass::Singleton的なゆるい(perlらしい?)Singleton。
ということで、Class::Singletonを使う方向で。