I don't think you're leveraging the greatest benefit of CGI::Application which is the parent class. Each of these different apps should have their own CGI::App child class, using a set of parent classes which would be shared across all your different apps. That's where the reuse comes in.

My criteria for good software:

Does it work?

Can someone else come in, make a change, and be reasonably certain no bugs were introduced?