Detailed Annotated Example:
#!/usr/bin/perl -w
use CGI;
use strict;
my $query=new CGI;
# Create a header, and let it default arguments, it likely knows
# better then we do.
print $query->header();
# Start the body of our document, and give it a title
print $query->start_html({-title=>'Compuware Perl Class State Example...',
-author=>'Bill Kilgallon'});
my $currentState = $query->param('myState');
# First time in the form, no state value exists
if ( ! $currentState ) {
# Start the input form
print $query->startform({-method=>'post'});
# Print Name form field
print $query->h2("Please enter your Name: ");
print $query->textfield({-name=>'userName'});
# Print Employee Number form field
print $query->h2("Please enter your Employee ID Number:");
print $query->textfield({-name=>'employeeId'});
print $query->p();
# Create a hidden field that maintains state so we know where we
# are in the sequence of forms.
$query->param('myState', 'DoPageTwo');
print $query->hidden({-name=>'myState'});
# Submit button
print $query->submit();
# End the form
print $query->endform();
}
# See if we are in stage two of our form list
elsif ( $currentState eq 'DoPageTwo' )
{
# Start the input form
print $query->startform({-method=>'post'});
# Print Date form field
print $query->h2("Please enter Todays Date: ", $query->br());
print $query->textfield({-name=>'theDate'});
# Create a hidden field that maintains state so we know where we
# are in the sequence of forms.
$query->param('myState', 'DoPageThree');
print $query->hidden({-name=>'myState'});
# We also need to carry along some other hidden fields, to
# propagate the info from the first form through this second
# form, and on to the third form, etc.
print $query->hidden({-name=>'userName'});
print $query->hidden({-name=>'employeeId'});
print $query->hidden({-name=>'theDate'});
# Submit button
print $query->submit();
# End the form
print $query->endform();
}
# See if we are in stage three of our form list
elsif ( $currentState eq 'DoPageThree' )
{
# Continue to carry along necessary hidden fields
print $query->hidden({-name=>'userName'});
print $query->hidden({-name=>'employeeId'});
print $query->hidden({-name=>'theDate'});
print $query->h1("Here are the values you input so far:");
print $query->p($query->em("userName: ") . $query->param('userName'));
print $query->p($query->em("employeeId: ") . $query->param('employeeId'));
print $query->p($query->em("theDate: ") . $query->param('theDate'));
print $query->hr();
# Set the state for the link to be generated for option one
$query->param('myState', 'DoPageFourA');
print $query->a({-href=>$query->url({-query=>1})},
"Choose Link A" );
print $query->br();
# Set the state for the link to be generated for option two
$query->param('myState', 'DoPageFourB');
print $query->a({-href=>$query->url({-query=>1})},
"Choose Link B" );
print $query->hr();
}
# See if we are in form 4, branch A of our state thread
elsif ( $currentState eq 'DoPageFourA' )
{
print $query->h1("You chose ", $query->em("Option A"));
print $query->hr();
print $query->h2("Here are the values you input so far:");
print $query->p($query->em("userName: ") . $query->param('userName'));
print $query->p($query->em("employeeId: ") . $query->param('employeeId'));
print $query->p($query->em("theDate: ") . $query->param('theDate'));
print $query->hr();
}
# See if we are in form 4, branch B of our state thread
elsif ( $currentState eq 'DoPageFourB' )
{
print $query->h1("You chose ", $query->em("Option B"));
print $query->hr();
print $query->h2("Here are the values you input so far:");
print $query->p($query->em("userName: ") . $query->param('userName'));
print $query->p($query->em("employeeId: ") . $query->param('employeeId'));
print $query->p($query->em("theDate: ") . $query->param('theDate'));
print $query->hr();
}
# And finally, end the document.
print $query->end_html;