Since I work with a fairly large set of scripts, I actually use one "main" CGI::Application to control say the "task" run-mode, and then have multiple chilren CGI::Applications to control the "subtask" run modes. This way, common functionality resides together and the code is all in manageable chunks. The main script is in charge of deciding which CGI::Application module to run.