package TaskManager; use Task; sub new { # create. # receive task objects or task names, store them via add_task. } sub add_task { # receive task objects or task names my $self = shift; push @{$self->{_tasks}}, map { ref $_ ? $_ : Task::find_task($_) } @_; } sub execute_tasks { my $self = shift; # do we need to do them? my @tasks = grep { $_->needed() } @{$self->{_tasks}} for my $t (@tasks) { $t->perform_task(); } } 1;