BatchJobs::Job should be an interface and other objects should be created that implement that interface. This would separate the script/command/subroutine that all got smashed (one at a time) into the same object. Check out the Process module on CPAN for a model (or possibly use it).