Sub::SingletonBuilder - a singleton subroutine builder


Sub-SingletonBuilder documentation Contained in the Sub-SingletonBuilder distribution.

Index


Code Index:

NAME

Top

Sub::SingletonBuilder - a singleton subroutine builder

SYNOPSIS

Top

  use Sub::SingletonBuilder;

  # simple example
  *dbh = build_singleton(sub {
      DBI->connect(...);
  });
  dbh()->execute(...);

  # declare explicit destructor as well
  (*dbh, *dbh_disconnect) = build_singleton(
      sub {
          DBI->connect(...);
      },
      sub {
          my $dbh = shift;
          $dbh->disconnect();
      },
  );

AUTHOR

Top

Kazuho Oku

COPYRIGHT AND LICENSE

Top


Sub-SingletonBuilder documentation Contained in the Sub-SingletonBuilder distribution.

package Sub::SingletonBuilder;

use strict;
use warnings;

use base qw/Exporter/;

our @EXPORT = qw/build_singleton/;
our $VERSION = '0.02';

sub build_singleton {
    my ($ctor, $dtor) = @_;
    my $instance = undef;
    my $getter = sub {
        $instance ||= $ctor->();
    };
    wantarray && $dtor
        ? (
            $getter,
            sub {
                $dtor->($instance) if $instance;
                $instance = undef;
            },
        )
            : $getter;
}

1;
__END__