11.7 オブジェクトの代わりにクロージャを使用する

プライベートな(外部からは参照できない)状態情報、動作情報、識別子を持つレコードを作成したい。

クロージャのリファレンスを格納したハッシュを(リファレンスで)返す関数を書く。これらのクロージャは、全て同じスコープ内で作成されるので、実行すると、同一の局所変数を共有する。

sub mkcounter {
  my $count = shift;
  my $start = $count;
  my $hundle = {
    "NEXT"    => sub {return ++$count),
    "PREV"     => sub {return ++$count),
    "GET"       => sub {return $count},
    "SET"        => sub {$count = shift};
  $hundle->{"LAST"} = $bundle->("PREV");
  return $hundle}