That's still a lot of typing. It turns out that CGI.pm includes a whole slew of convenience functions for simplifying this. Each of these routines returns a string for you to output. For example, header()
returns a string containing the Content-type
line with a following blank line, start_html(
string
) returns string
as an HTML title, h1(
string
)
returns string
as a first-level HTML heading, and p(
string
) returns string
as a new HTML paragraph.
We could list all these functions in the import list given with use
, but that will eventually grow too unwieldy. However, CGI.pm, like many modules, provides you with import tags - labels that stand for groups of functions to import. You simply place the desired tags (each of which begins with a colon) at the beginning of your import list. The tags available with CGI.pm include these:
:cgi
Import all argument-handling methods, such as param()
.
:form
Import all fill-out form generating methods, such as textfield()
.
:html2
Import all methods that generate HTML 2.0 standard elements.
:html3
Import all methods that generate HTML 3.0 elements (such as <table>
, <super>,
and <sub>
).
:netscape
Import all methods that generate Netscape-specific HTML extensions.
:shortcuts
Import all HTML-generating shortcuts (that is, "html2" + "html3" + "netscape").
:standard
Import "standard" features: "html2", "form", and "cgi".
:all
Import all the available methods. For the full list, see the CGI.pm module, where the variable %TAGS
is defined.
We'll just use :standard
. (For more about importing functions and variables from modules, see the Exporter module in Chapter 7 of Programming Perl, or the Exporter (3) manpage.)
Here's our program using all the shortcuts CGI.pm provides:
#!/usr/bin/perl -w
# cgi-bin/ice_cream: program to answer ice cream
# favorite flavor form (version 2)
use CGI qw(:standard);
print header(), start_html("Hello World"), h1("Greetings, Terrans!");
my $favorite = param("flavor");
print p("Your favorite flavor is $favorite.");
print end_html();
See how much easier that is? You don't have to worry about form decoding, headers, or HTML if you don't want to.