I use three runmodes for this purpose.
- login() presents the login form. It also optionally accepts an error message which it passes off to HTML::Template.
- validate() is the runmode executed by the login form. If the login is unsuccessful, it returns a call to login() with the appropriate error message. If it is successful, it calls home(). validate() doesn't display anything of its own.
- home() displays the home page. It's a passthru to HTML::Template, with the appropriate values for the specific user set. (It doesn't do any processing of its own - all the user processing is done in a base class.)
I hope that helps.
------
We are the carpenters and bricklayers of the Information Age.
Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.