Home
Asymmetrical - June 18th, 2008 [entries|archive|friends|userinfo]
kyle_burton

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

June 18th, 2008

Idempotency or Singleton Memoization [Jun. 18th, 2008|09:14 am]
[Tags|]

sub makeDoOnce {
  my($sub) = @_;
  my $alreadyDone = undef;
  my @result      = undef;
  my $exception   = undef;
  return sub {
    die $exception if $exception;
    if ($alreadyDone) {return wantarray ? @result : $result[0];}

    eval {
      my $w = wantarray;
      if (not defined $w) {             $sub->(@_)}
      if ($w)             {@result    = $sub->(@_)}
      else                {$result[0] = $sub->(@_)}
    };
    $exception = $@ if $@;
    die $exception if $exception;
    $alreadyDone = 1;
    return wantarray ? @result : $result[0];
  };
}
linkpost comment

navigation
[ viewing | June 18th, 2008 ]
[ go | Previous Day|Next Day ]

Advertisement