Personally this sound ripe for using Test Driven Development. At the very least I would write a basic test suite, preferably broken down by component. Once you have this test suite in place you can trivially make any changes and *know* they work. This is invaluable. Once you have a test suite in case you can easily redesign the application from scratch because you know *Exactly* what functionality it has to have.
Comment on Re: how to migrate a large perl 4ish CGI site to mod_perl
Perl Medic makes it very clear that a test suite is a basic requirement to modernize legacy code. other wise you never know that the chances you make will not break the application.
That and a good versioning system (CVS, Perforce, Subversion, ...) is the way to go.
CountZero
"If you have four groups working on a compiler, you'll get a 4-pass compiler." - Conway's Law