#!/usr/bin/perl -- use strict; use warnings; use CGI::FormBuilder; Main( @ARGV ); exit( 0 ); sub Main { my $cgi = CGI->new; # Our "mode" parameter determines what we do my $mode = $cgi->param('mode') || 'default'; # Change our form based on our mode if ($mode eq 'view') { modeView( $cgi ); } elsif ($mode eq 'edit') { modeEdit( $cgi ); } else { modeDefault( $cgi ); } } sub modeDefault { ... } sub modeEdit { ... } sub modeView { my ( $cgi ) = @_; my $form = CGI::FormBuilder->new( method => 'post', fields => [qw(...)], params => $cgi # get CGI params ); ... if ($form->submitted && $form->validate) { print $form->confirm; } else { print $form->render; } }