Perl

PerlでSingleton(シングルトンパターン)

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ならではのゴニョゴニョした書き方いろいろ勉強してたんですが、とりあえずまた思い出したらメモします。