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;