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 <pravus@cpan.org>

LICENSE

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