http://www.perlmonks.org?node_id=333277


in reply to CGI::Application design strategy

I'm used to write two runmodes for every panel in my application. In your case, they would be login and login_update. Given a method redirect to set the appropriate headers, the code could be the following (not-so-pseudo-code):
# Does nothing except printing the form. # Using sessions you can pass to it an error_message, # for example. # sub login + { my $self = shift; + my $tmpl = $self->load_tmpl( 'login' ); + return $tmpl->output(); + } sub login_update + { my $self = shift; + my $q = $self->query; # Fetch username and password from the form # if ( PASSWORD CORRECT ) { $self->redirect( { rm => 'first_panel' } ); } else { # It could store some useful info in a session, # for example the error message. # $self->redirect( { rm => 'login' } ); } return; }
I use this technique a lot, and it has proven its flexibility and efficiency.