You want the default values for the fields in your form to be the last values submitted. For instance, you want to create a search form like AltaVista ( http://altavista.digital.com/ ) where the keywords you're searching with appear in the search dialog above the results.
Use CGI.pm's HTML shortcuts to create your form, which will automatically provide previous values as defaults:
print textfield("SEARCH"); # previous SEARCH value is the default
Example 19.8 is a simple script for querying the list of users currently logged in.
#!/usr/bin/perl -wT # who.cgi - run who(1) on a user and format the results nicely $ENV{IFS}=''; $ENV{PATH}='/bin:/usr/bin'; use CGI qw(:standard); # print search form print header(), start_html("Query Users"), h1("Search"); print start_form(), p("Which user?", textfield("WHO")); submit(), end_form(); # print results of the query if we have someone to look for $name = param("WHO"); if ($name) { print h1("Results"); $html = ''; # call who and build up text of response foreach (`who`) { next unless /^$name\s/o; # only lines matching $name s/&/&/g; # escape HTML s/</</g; s/>/>/g; $html .= $_; } # nice message if we didn't find anyone by that name $html = $html || "$name is not logged in"; print pre($html); } print end_html();
The call to
textfield
generates HTML for a text entry field whose parameter name is
WHO
. After printing the form, we check whether we were called with a value for the
WHO
parameter. If so, we try to find the lines in the output from
who
for that user.
The documentation for the standard CGI module; Recipe 19.4 ; Recipe 19.7