Data::Flow - Perl extension for simple-minded recipe-controlled build of data. |
Data::Flow - Perl extension for simple-minded recipe-controlled build of data.
use Data::Flow; $recipes = { path => { default => './MANIFEST'}, contents => { prerequisites => ['path', 'x'] , process => sub { my $data = shift; $data->{ shift() } = `cat $data->get('path')` x $data->get('x'); } }, };
$request = new Data::Flow $recipes; $request->set( x => 1); print $request->get('contents');
tie %request, Data::Flow, $recipes; $request{x} = 1; print $request{contents};
The module Data::Flow provides its services via objects. The objects may be obtained by the usual
$request = new Data::Flow $recipes;
paradigm. The argument $recipes is a hash reference, which provides
the rules for request processing. The objects support two methods,
set()
and get(). The first one is used to provide input data for
processing, the second one to obtain the output.
The unit of requested information is a field. The method set()
takes a pair field => value
, the method get()
takes one
argument: the field
.
Every object is created without any fields filled, but it knows how to
construct fields basing on other fields or some global into. This
knowledge is provided in the argument $recipe of the new()
function. This is a reference to a hash, keyed by fields. The
values of this hash are hash references themselves, which describe how
to acquire the field which is the corresponding key of the initial
hash.
The internal hashes may have the following keys:
default
default => $Config{installdir}
prerequisites
If defaults
did not satisfy the request for a field, but
$recipe->{field}{prerequisites}
exists, the required
fields are build before any further processing is done. Example:
prerequisites => [ qw(prefix arch) ]
process
process => sub { my $data = shift; $data->set( time => localtime(time) ) }
output
process
, but the
return value of the subroutine is used as the value of the
field. Example:
output => sub { localtime(time) }
filter
filter => [ sub { shift + shift }, 'first_half', 'second_half' ]
Note that the mentioned field will be automatically marked as prerequisites.
class_filter
filter
, but the first argument is the name of the
method to call, second one is the name of the package to use for the
method invocation. The rest contains names of field to provide as
method arguments. Example:
class_filter => [ 'new', 'FileHandle', 'filename' ]
method_filter
class_filter
, but the second argument is the name of the
field which is used to call the method upon. Example:
method_filter => [ 'show', 'widget_name', 'current_display' ]
The access to the same functionality is available via tied hash interface.
Ilya Zakharevich, ilya@math.ohio-state.edu
perl(1), make(1).
Data::Flow - Perl extension for simple-minded recipe-controlled build of data. |