Perl Cookbook

Perl CookbookSearch this book
Previous: 19.10. Managing CookiesChapter 19
CGI Programming
Next: 19.12. Writing a Multiscreen CGI Script

19.11. Creating Sticky Widgets


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 ( ) where the keywords you're searching with appear in the search dialog above the results.


Use'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.

Example 19.8: who.cgi

#!/usr/bin/perl -wT
# who.cgi - run who(1) on a user and format the results nicely


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
        $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.

See Also

The documentation for the standard CGI module; Recipe 19.4; Recipe 19.7

Previous: 19.10. Managing CookiesPerl CookbookNext: 19.12. Writing a Multiscreen CGI Script
19.10. Managing CookiesBook Index19.12. Writing a Multiscreen CGI Script

Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.