FIT3084: Perl CGI Scripts
In the previous lecture:
In this lecture:
References:
Perl at light speed
Functions / Subroutines
Functions are declared and called as illustrated by this simple example.
#!/usr/monash/bin/perl -w
$val1 = 7;
$val2 = 9;
$answer = &maximum($val1, $val2); # assign global $answer to maximum of 9 and 7
# use the '&' symbol to call a function
print "answer = $answer\n"; # print the value of $answer
sub maximum # define a subroutine maximum
{
my ($arg1, $arg2) = @_; # receive the arguments passed in through @_
# and place them in the local variables $arg1 & 2
my ($result); # declare a local variable $result
if ($arg1 >= $arg2)
{ $result = $arg1; }
else
{ $result = $arg2; }
return $result; # return $result
}
|
Mark tallying example
Suppose we have a list of student names and their assignment scores:
| Noel 25 |
| Ben 76 |
| Clementine 49 |
| Norm 66 |
| Chris 92 |
| Doug 42 |
| Carol 25 |
| Ben 12 |
| Clementine 0 |
| Norm 66 |
| Ben 9 |
Consider the following Perl program:
#!/usr/monash/bin/perl -w open (GRADES, "grades") or die "Can't open grades: $!\n"; while ($line = |
In your own time: |
Run the program on your local account and look at the results. Modify the script so the results are displayed on a web page via CGI. |
#!/usr/bin/perl # A calendar script $CAL = '/usr/bin/cal'; $YEAR = 2001; # fetch the text of the calendar using the unix cal command # and chop off the newline character at the end of the returned string chop($calendar_text = `$CAL $YEAR`); #print the output html document print <<END Content-type: text/html <HTML> <HEAD> <TITLE>HAL's Calendar</TITLE> </HEAD> <BODY bgcolor="#ffffff" text="#000000"> <BR> <B>Hi Dave!</B> <BR> Here's the calendar you requested. <BR> Love HAL. <PRE> $calendar_text </PRE> <A HREF="~aland/notes/lect18.html">lecture 18</A> </BODY> </HTML> END |
Run the calendar script.
#!/usr/monash/bin/perl # randomFile.pl $FILE_DIRECTORY = 'http://www.cs.monash.edu.au/~aland/notes/randomFiles'; $MAXIMUM = 1000; $NUMBER_OF_FILES = 3; #set random seed and select a random file name srand(time); $number = int(rand($MAXIMUM)); $number = $number % $NUMBER_OF_FILES; #return the location of this file to the browser print "Location: $FILE_DIRECTORY/file$number.html\n\n"; |
Run the random file script.
#!/usr/monash/bin/perl
# print environment variables
&print_HTTP_header;
&print_head;
&print_body;
&print_tail;
# ---- print the HTTP content-type header
# ----
sub print_HTTP_header
{
print "Content-type: text/html\n\n";
}
# ---- print HTML stuff at head
sub print_head
{
print <<END;
<HTML><HEAD>
<TITLE>Environment Variables</TITLE>
<BODY bgcolor="#ffffff" text="#000000">
<H4>Environment Variables</H4>
END
}
# ---- loop through env var's and print them
# ----
sub print_body
{
foreach $env_var (sort keys %ENV)
{
print "<STRONG>$env_var:</STRONG> $ENV{$env_var}<BR>\n";
}
}
# ---- print HTML stuff at tail
# ----
sub print_tail
{
print "<BR><BR>";
print "<A HREF = \"/~aland/notes/lect18.html\">lecture 18</A>";
print "</BODY></HTML>";
}
|
Run the print environment variables script.
Here is the HTML SRC for the call:
<A HREF="/cgi-bin/cgiwrap/~aland/printenv.pl/some/path/stuff?some+query+stuff">
Note the extra path info and the query string.
CGI.pm
Example (from perl doc):
#!/usr/monash/bin/perl
use CGI qw(:standard);
print header;
print start_html('A Simple Example'),
h1('A Simple Example'),
start_form,
"What's your name? ",textfield('name'),
p,
"What's the combination?",
p,
checkbox_group(-name=>'words',
-values=>['eenie','meenie','minie','moe'],
-defaults=>['eenie','minie']),
p,
"What's your favorite color? ",
popup_menu(-name=>'color',
-values=>['red','green','blue','chartreuse']),
p,
submit,
end_form,
hr;
if (param()) {
print
"Your name is",em(param('name')),
p,
"The keywords are: ",em(join(", ",param('words'))),
p,
"Your favorite color is ",em(param('color')),
hr;
}
print end_html;
|
#!/usr/local/bin/perl |
This code uses the cgi module in "function style" where its routines are brought into the standard namespace. |
#!/usr/local/bin/perl |
This code uses the cgi module in "object oriented style" where its routines are accessed through an "object" (CGI). |
For more information see: http://stein.cshl.org/WWW/CGI/.
Where to find more:
This Page of Perl Pearls is only the bare minimum required to understand the examples given in lectures.
Please read a book or website on Perl to become more familiar with the language.
Above all, practice writing a few Perl scripts!
Perl web sites:
©Copyright Alan Dorin 2009