Perlでシングルトンパターンでインスタンスを生成する備忘録です。シングルトンパターンはインスタンスの生成をひとつだけに保証するもの(受け売り)、です。PerlのCGI環境でもサブルーチン集のような自作モジュールに活用してます。
とりあえず一番シンプルなヤツだと思います↓。
package Test;
use strict;
my $this = undef;
sub new {
my $self = shift;
$this ||= bless { 'count' => 0 }, $self; # 初めだけインスタンスを作成
return $this;
}
1;
レキシカル変数$this
が未定義の場合に限りbless
します。その後はTest->new
しても同じ$this
を返します。代入演算子の||=
は左辺が偽であれば右辺の値を代入します(論理和)。この演算子、
(追記:&&=
(論理積)と合わせて便利に感じてますがPHPとかではないんですよね。知らないだけでしょうか、あったら誰か教えてください。||
や&&
が使えました。)
use strict;
use Test;
print "Content-Type: text/plain;\n\n";
my $test = Test->new;
print ++$test->{'count'} . "\n";
my $test2 = Test->new;
print ++$test2->{'count'} . "\n";
my $test3 = Test->new;
print ++$test3->{'count'} . "\n";
exit;
結果
1 2 3
他にも、カプセル化とかのPerlならではのゴニョゴニョした書き方いろいろ勉強してたんですが、とりあえずまた思い出したらメモします。