Here's a script that generates a web form the first time it's called, then calls itself again with the form data as parameters. When it sees it's been called with a valid age parameter, it writes out a web page and informs the user of success.
I don't claim it's good, or elegant, but it works for me. I'm by no means an excellent Perl programmer, but I'm doing OK with just a few weeks of experience. If you use it or it's helps you out, let me know.
#!/usr/local/bin/perl
# Change above line to point to the perl binary on your server
# The CGI on my server doesn't recognize the <div> tag, so I
# added it to the namespace. You can do this with any arbitrary
# tag.
use CGI qw(:standard *div);
# This is supposed to flush the cache so errors will show up
# in server logs. Useful for debugging.
$|=1;
# If I don't declare variables, the server complains as if 'use strict'
# was in force.
my $namey = param("name");
my $agey = param("age");
# Variable points to the location of this script on the server so it
# can call itself.
my $mee = "/cgi/monkeymagic";
if ($agey != "0") { # If we have a command line paramater
# for age, make a page
&pagit;
} else {
&formit; # Otherwise send the form
}
# This subroutine generates the form
sub formit {
print header,"\n", start_html('Testing is cool!');
print h1('This is a form!');
print p("Why not enter stuff and see what it does?");
print <<END_block;
<form action="$mee?name+?age">
<p>What is your name?<input name="name" value="Bob"></p>
<p>What is your age?<input name="age" value="0"></p>
<input type="submit">
</form>
END_block
print end_html;
}
# This subroutine writes the web page with submitted data
# then sends back a web page to say everything is fine
sub pagit {
my $outy = "../test.html"; # Location of output file.
# Make sure it's writable by perl.
# If the system runs CGI scripts as user
# "nobody," you may have to create the
# file beforehand and give it global
# write permission.
open OUTS, ">$outy" or die "Can't open $outy to write: $!";
print OUTS <<END_Text;
<html>
<head>
<title>A custom page, just for you!</title>
<link rel="stylesheet" type="text/css" href="../monkeystyle.css">
</head>
<body>
END_Text
# Just use a <div> to pretty things up a bit
print OUTS div({-id=>"hed"}, h1('This is a web page!'));
print OUTS "<p>This page was generated dynamically just for you. ";
print OUTS "Try again and see that it makes a new page every time. ";
print OUTS "(It might be necessary to refresh your browser if you're behind a proxy)</p>";
print OUTS p("Your name is $namey");
print OUTS p("Your age is $agey");
print OUTS "<p>Wasn't that cool? You can try it again if you want.";
print OUTS "Go <a href=\"$mee\">here</a> to try again.</p>";
print OUTS end_html;
# Not necessary, but nice anyway
close OUTS or die "Can't close file: $!";
# This part just sends back a page to the browser indicating
# success. Otherwise you get an error and don't know if the
# script finished correctly.
print header, start_html('All done'), h1('Magic complete!');
print "<p>Results can be found <a href=\"$outy\">here</a></p>";
print end_html;
}