# here's the pre portion...
my $count;
my %data;
IterateOver::file({
loop => sub {
if (/^(.*?)\s*=\s*(.*?)\s*(?:#.*)$/)
{
$data{$1} = $2;
}
},
$some_file
);
# post goes here...
####
my @files = ( ... );
my $count;
my %data;
IterateOver::files({
pre => sub {
print "Starting on file $_.\n";
$count = 0;
},
loop => sub {
if (/^[^#]/ and /^(.*?)\s*=\s*(.*?)\s*(?:#.*)$/)
{
$data{$1} = $2;
++$count;
}
},
post => sub {
print "Found $count keys in $_.\n";
print "Total unique keys so far: ", scalar keys %data, "\n";
},
@files
);
####
package TaskFilter;
use base 'Task';
sub prefilter
{ 1 } # default pre is to do nothing and succeed at it.
sub postfilter
{ 1 } # same thing
sub filter
{ die "need to implement filter in subclass '" . ref $_[0] . "'\n"; }
sub get_object_list
{
# generic implementation common to all my tasks derived from here.
}
sub sort_object_list
{
# to allow subclass to change order if needed.
sort @_
}
sub perform_task {
my $self = shift;
$self->prefilter() or die "prefilter failed.";
my @records = $self->sort_object_list($self->get_object_list());
for my $r (@records)
{
$self->filter($r);
}
$self->postfilter() or die "postfilter failed.";
1;
}
1;