'start' is the default runmode (or 'start mode') that is used if no runmode parameter is provided in the request object. However, in your setup method, you have set the start_mode to 'mode1', so in the absense of a runmode parameter, it should load the 'mode1' runmode as the default.

Wouldn't the mode value come from CGI then? Make sure you set a default run mode or the 'rm' parameter is present in the request. There should be detailed instructions in the CGI::Application perldoc. Wish you luck!

Here's link to a tutorial that might help. Although, from a quick glance at your code, you seem to have done things right. Still, may be worth checking over. One immediate suggestion might be to try setting run mode parameter and default value after the code which defines all run modes:

_____________________
"We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare. Now, thanks to the Internet, we know this is not true."