Matt S Trout > Moo-1.000008 > Sub::Defer

Download:
Moo-1.000008.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  2
Open  3
View/Report Bugs
Source   Latest Release: Moo-1.005000

NAME ^

Sub::Defer - defer generation of subroutines until they are first called

SYNOPSIS ^

 use Sub::Defer;

 my $deferred = defer_sub 'Logger::time_since_first_log' => sub {
    my $t = time;
    sub { time - $t };
 };

  Logger->time_since_first_log; # returns 0 and replaces itself
  Logger->time_since_first_log; # returns time - $t

DESCRIPTION ^

These subroutines provide the user with a convenient way to defer creation of subroutines and methods until they are first called.

SUBROUTINES ^

defer_sub

 my $coderef = defer_sub $name => sub { ... };

This subroutine returns a coderef that encapsulates the provided sub - when it is first called, the provided sub is called and is -itself- expected to return a subroutine which will be goto'ed to on subsequent calls.

If a name is provided, this also installs the sub as that name - and when the subroutine is undeferred will re-install the final version for speed.

undefer_sub

 my $coderef = undefer_sub \&Foo::name;

If the passed coderef has been deferred this will "undefer" it. If the passed coderef has not been deferred, this will just return it.

If this is confusing, take a look at the example in the "SYNOPSIS".

syntax highlighting: