NAME
   Sub::Lib - Stuff sub-routines into a run-time namespace. Because.
   Reasons.

SYNOPSIS
     use Sub::Lib;

     # create a library
     my $lib = Sub::Lib->new({
       'log' => sub {print join(' ', localtime. ':', @_), "\n"},
     });

     # add methods
     $lib->('info',  sub {$lib->('log')->('info:', @_)});
     $lib->('warn',  sub {$lib->('log')->('warn:', @_)});

     # call them directly
     $lib->('info')->('This is for information');

     # or via some sugar
     $lib->run('warn', 'This is for warnings');

     # or via some oo sugar
     $lib->('method', sub {my ($self, @args) = @_; $self->run(@args);});
     $lib->call('method', $lib, 'info', "Have you seen?  Oh I've seen.");

     # cheeseburger
     {
       my $sub = $lib->has('warn');
       $sub->("I can has.")
         if $sub;
     }

     # scan the library
     $lib->('info')->('installed subs:', join(', ', keys %{$lib->()}));

DESCRIPTION
   Sub::Lib allows you to store sub-routines into a common library which
   can then passed around as a variable. It's a run-time namespace.

USAGE
 "new([HASHREF | LIST])"
   Creates a library object and initializes it with entries that may be
   passed in as either a "HASH" reference or "LIST" of key-value pairs. The
   object created is itself a sub-routine that can be called directly in
   order to run sub-routines stored in the library:

     $lib->('sub-routine name goes here')->(qw(sub routine args go here));

   Additional sub-routines may be added by providing a "CODE" reference:

     $lib->('a new sub-routine', sub {
       # code goes here
     });

   If no arguments are passed, the internal library is returned:

     my $_lib = $lib->();

 "has($name)"
   Returns the sub-routine installed in the library identified by $name or
   undef if it does not exist.

 "run($name, [LIST])"
   Runs the sub-routine stored in the library identified by $name. An
   exception will be thrown if no sub-routine by that name can be found.
   Any additional arguments are passed to the sub-routine.

 "call($object, $name, [LIST])"
   Calls the sub-routine stored in the library identified by $name as a
   method to the object in $object. This is similar to "run()" above but
   uses Perl's object semantics. Additional arguments are passed to the
   method.

AUTHOR
   jason hord <[email protected]>

LICENSE
   This software is information. It is subject only to local laws of
   physics.