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.