Hmmm ... that exit at the end of each method is a real bad code smell. It may be perfectly okay but I think it would give most CGI::Application'ers pause.
Without knowing about your app, it's really hard to comment on your approach. For me, once the run modes start getting past a half-dozen or so, I start looking for ways to refactor. Either as other apps or by taking a hard look at my runmodes and deciding their not really runmodes but maybe differing views or differing model of a runmode -- moving those decisions further down into the controller.