660 likes | 675 Views
This lecture covers the CGI module and Perl modules, including their syntax, usage, and functions. It also demonstrates how to use CGI.pm to generate HTML tags and provides examples of different types of functions and their outputs.
E N D
Introduction to Programming the WWW I CMSC 10100-1 Summer 2004 Lecture 13
Today’s Topics • CGI module • Patterns and regular expression
Perl Modules • A Perl module is a self-contained piece of Perl code that can be used by a Perl program or by other Perl modules • Conceptually similar to a C link library, or a C++ class • Perl 5 module list • Each Perl module has a unique name • Perl provides a hierarchal name space for modules • Components of a module name are separated by double colons (::) • Example: • CGI • Math::Complex
Perl Modules (cont’d) • Each module is contained in a single file • Module files are stored in a subdirectory hierarchy that parallels the module name hierarchy • All module files have an extension of .pm • Example: • Math::Complex is stored in Math/Complex.pm • Finding module libraries • The Perl interpreter has a list of directories in which it searches for modules. This list is available in the global array @INC • Use perl –V to see the initial contents of @INC • Local modules vs. modules coming from standard distribution • CGI stored in /opt/perl/perl-5.005.03/lib/5.00503/CGI.pm • Math::Complex is actually stored in /opt/perl/perl-5.005.03/lib/5.00503/Math/Complex.pm
Using Perl Modules • Modules must be imported in order to be accessible to a script • This is done with the use function • use statements are commonly made at the beginning of a program or subroutine • This makes it easier to understand the program and see which modules are loaded. • Example: use Math::Complex; use CGI “:standard”; A modifier to a module http://world.std.com/~swmcd/steven/perl/module_mechanics.html
Using CGI.pm to generate HTML • The CGI.pm module provides several functions that can be used to concisely output HTML tags • For example, $mypage=‘It is a New Day’; print “<HTML><HEAD><TITLE> $mypage </TITLE></HEAD><BODY>”; can also be written as: $mypage=’It is a New Day’; print start_html(‘$mypage’);
3 Basic CGI.pmModules • header • creates the MIME Content-type line • start_html • creates starting HTML tags • end_html • creates ending HTML tags 1.#!/usr/local/bin/perl 2.use CGI ‘:standard’; 3.print header; 4.print start_html; 5.print '<FONT size=4 color="blue">'; 6.print 'Welcome <I>humans</I> to my site</FONT>'; 7. print end_html; http://people.cs.uchicago.edu/~hai/hw4/cgipm1.cgi
CGI.pm Basic Functions • The various CGI/PM function accept 3 basic syntactic formats: • No argument format • functions that can be used without any arguments • Positional argument format • functions that can accept comma-separated arguments within parentheses • Name-value argument format • functions that accept parameters submitted as name-and-value pairs
No Argument Format • The Previous Example shows the start_html, header, end_html functions • You can place the 1 or more functions directly within a print statement • Would output <HTML><HEAD><TITLE></TITLE></HEAD><BODY><BR><BR><HR>
CGI.pm Function Example of Use Example Output header- the MIME Content-type line print header; Content-type:text/html\n\n start_html—Tags to start an HTML document print start_html; <HTML><HEAD><TITLE></TITLE></HEAD><BODY> br—output <BR> tag print br; <BR> hr—generate horizontal rule print hr; <HR> end_html—end an HTML document print end_html; </BODY></HTML> Some Single Argument Functions
Positional Argument Format • Specify multiple arguments based on the position of the argument • For example would output <H1>Hello World</H1>
CGI.pmFunctions Example of Use Example Output start_html()—tags needed to start an HTML document. start_html(‘My Page’); <HTML><HEAD><TITLE> My Page </TITLE></HEAD><BODY> h1()—header level 1 tags. (also h2(), …,h6() ) print h1(‘Hello There’); <H1>Hello There </H1> strong() – output argument in strong. print strong('Now'); <STRONG>Now</STRONG> p()—creates a paragraph. print p(‘Time to move’); <P>Time to move </P> b()—prints the argument in bold. print b('Exit'); <B>Exit</B> i()—prints the argument in italics. Print i('Quick'); <I>Quick</I> Some Positional Functions
Operating on Variables • Can concisely use functions with a single print statement: • print i('Please '),'come when I call you ', strong('immediately.'); • This code would output the following: • <I>Please</I> come when I call you <STRONG>immediately.</STRONG>
Consider the following example: 1. #!/usr/local/bin/perl 2. use CGI ':standard'; 3. print header, start_html(‘Positional Example’), h1('Simple Math'); 4. print b('two times two='), 2*2; 5. print br, 'but ', b('four times four='), 4*4; 6. print br, 'Finally, ', b('eight times eight='), 8*8; 7. print end_html; http://people.cs.uchicago.edu/~hai/hw4/cgipm2.cgi
Name-Value Argument Format • Can specify names and values as follows: • Would output the following: <HTML><TITLE>My Title</TITLE></HEAD><BODY BGCOLOR=”yellow”>
CGI.pmFunction Example Usage Example Output start_html start HTML document print start_html({ -title=>‘my title’, –bgcolor=>’red’ }); <HTML><HEAD><TITLE>my title</TITLE></HEAD> <BODY BGCOLOR=”RED”> img—inserts an image print img({-src=>'myfile.gif', -alt=>’picture’}); <IMG SRC="myfile.gif” alt=”picture”> a—establishes links print a({ -href =>'http://www.mysite.com'}, 'Click Here'); <A HREF="http://www.mysite.com"> Click Here </A> font()— creates <FONT> … </FONT> tags print font( { -color=>‘BLUE’, –size=> ’4’}, ‘Lean, and mean.’); <FONT SIZE=”4” COLOR=”BLUE”> Lean, and mean. </FONT> Some name/value functions
Example Name/Value Program 1.#!/usr/local/bin/perl 2.use CGI ':standard'; 3.print header; 4.print start_html({-title=>'New Day ', -bgcolor=>'yellow'}); 5.print 'Welcome One And ', i('All'); 6.print end_html; http://people.cs.uchicago.edu/~hai/hw4/cgipm3.cgi
CGI.pmFunction Example Usage Example Output start_form start HTML form element print start_form({ -method=>‘post’, –action=> ‘http://people.cs.uchicago.edu/~wfreis/cgi-bin/reflector.pl’}); <form method="post" action=http://people.cs.uchicago.edu/~wfreis/cgi-bin/reflector.pl> textfield, password_field —inserts a text field or password field print textfield(-name=>'textfield1', -size=>'50', -maxlength=>'50'); <input type="text" name="textfield1" size=50 maxlength=50 /> scrolling_list—insert a multiple list print scrolling_list(-name=>'list1', -values=> ['eenie', 'minie', 'moe'], -default=> ['eenie','moe'], -size=>5, -multiple=>'true'); <select name="list1" size=5 multiple> <option selected value= "eenie“ > eenie</option> <option value="minie">minie </option> <option selected value="moe">moe </option> </select> textarea—inserts a text area print textarea(-name=> 'large_field_name', -rows=> 10, -columns=>50); <textarea name="large_field_name" rows=10 cols=50></textarea> Using CGI.pm with HTML forms
CGI.pmFunction Example Usage Example Output checkbox_group – insert checkbox print checkbox_group(-name=> 'color', -values=>['red ','orange ','yellow '], -default=>['red ']); <input type="checkbox" name="color" value="red " checked />red <input type="checkbox" name="color" value="orange " />orange <input type="checkbox" name="color" value="yellow " />yellow raidio-group —inserts a text field print radio_group(-name=>'color blind', -values=>['Yes','No'], -default=>'No'); <input type="radio" name="color blind" value="Yes" />Yes<input type="radio" name="color blind" value="No" checked />No submit,reset—insert a submit or reset button print submit('submit', 'Submit'); Print reset; <input type="submit" name="submit" value="Submit" /><input type="reset" /> endform— print end form tag print endform(); </form> Using CGI.pm with HTML forms (cont’d) Perl CGI Reference
A CGI Form Example http://people.cs.uchicago.edu/~hai/hw4/cgiform1.cgi
Receiving HTML Form Arguments • Within the CGI program call param() function • Input variables into CGI/Perl programs are called CGI variables • Values received through your Web server as input from a Web browser, usually filled in a form • To use param():
Receiving HTML Form Arguments http://people.cs.uchicago.edu/~hai/hw4/cgiform1.cgi
Sending Arguments • You can send arguments to your CGI program directly from the URL address of a browser http://people.cs.uchicago.edu/~hai/hw4/cgiform1_checker.cgi?color=red
Sending Multiple Arguments http://people.cs.uchicago.edu/~hai/hw4/cgiform1_checker.cgi?color=red&secret=nothing Precede first argument with ? Precede next argument with &
Debug CGI Program in Command Line • To start and send an argument to the password program can execute the following: perl cgiform1_checker.cgi color=red • Enclose blank spaces or multiple arguments in quotation marks: perl cgiform1_checker.cgi ‘color=rose red’ perl cgiform1_checker.cgi 'color=red&secret=none'
Check CGI VariablesValues • Perl provides a simple method to test if any parameters were received or null: $var = param(‘some_cgi_variable’) ; if ($var) { statement(s) to execute when $var has a value } else { statement(s) to execute when $var has no value }
Combining Program Files • Applications so far have required two separate files; one file for to generate the form, and the other to process the form • Example: cgiform1.cgi and cgiform1_checker.cgi • Can test return value on param() to combine these • At least two advantages • With one file, it is easier to change arguments • It is easier to maintain one file
Combining Program Files http://people.cs.uchicago.edu/~hai/hw4/cgiform2.cgi
CGI Module: Advanced Topic* • Functional(procedural) Orientation • use CGI ‘:standard’; • Object Orientation • use CGI; • Call new() operator to create a CGI object and stores in a variable. The functions of CGI.pm are accessed through the -> operator with the object variable at the left side • $q = new CGI; • print $q->header(); • http://www.classes.cs.uchicago.edu/classes/archive/2004/winter/10100-1/02/perl/perl_index.html
Several Resources • URL • http://www.classes.cs.uchicago.edu/classes/archive/2004/winter/10100-1/02/perl/perl_index.html • Topics • How to write your first CGI script • Checking CGI Parameters on the Command Line • Server-side Validation • Hidden HTML Form Fields • Sorting with Perl
Patterns in String Variables • Many programming problems require matching, changing, or manipulating patterns in string variables. • An important use is verifying input fields of a form • helps provide security against accidental or malicious attacks. • For example, if expecting a form field to provide a telephone number as input, your program needs a way to verify that the input comprises a string of seven digits.
Four Different Constructs • Will look at 4 different Perl String manipulation constructs: • Thematch operator enables your program to look for patterns in strings. • Thesubstitute operator enables your program to change patterns in strings. • Thesplit function enables your program to split strings into separate variables based on a pattern. (already covered) • Regular expressions provide a pattern matching language that can work with these operators and functions to work on string variables.
The Match Operator • The match operator is used to test if a pattern appears in a string. • It is used with the binding operator (“=~”) to see whether a variable contains a particular pattern.
Using Character Class • Matching any one in a set of characters enclosed within square brackets • foo[bc]ar will match foobar and foocar • Ranges can be expressed inside of a character class by using a dash between two characters • [a-g] is equal to [abcdefg] • [0-9]is equal to any digit • [a-zA-Z] • Negative character class: use the caret (^) symbol as the first thing in the character class • a[^bc]d, [^0-9]
Other Delimiters? • Slash (“/”) is most common match pattern • Others are possible, For example, both use valid match operator syntax: • if ( $name =~ m!Dave! ) { • if ( $name =~ m<Dave> ) { • The reverse binding operator test if pattern is NOT found: if ( $color !~ m/blue/ ) { • Demo http://www.people.cs.uchicago.edu/~wfreis/regex/regex_match.pl
The Substitution Operator • Similar to the match operator but also enables you to change the matched string. • Use with the binding operator (“=~”) to test whether a variable contains a pattern
How It Works • Substitutes the first occurrence of the search pattern for the change pattern in the string variable. • For example, the following changes the first occurrence of t to T: $name = “tom turtle”; $name =~ s/t/T/; print “Name=$name”; • The output of this code would be Name=Tom turtle
Changing All Occurrences • You can place a g (for global substitution) at the end of the substitution expression to change all occurrences of the target pattern string in the search string. For example, • $name = “tom turtle”; • $name =~ s/t/T/g; • print “Name=$name”; • The output of this code would be • Name= Tom TurTle • Demo http://www.people.cs.uchicago.edu/~wfreis/regex/regex_sub.pl
Using Translate • A similar function is called tr (for “translate”). Useful for translating characters from uppercase to lowercase, and vice versa. • The tr function allows you to specify a range of characters to translate from and a range of characters to translate to. : $name="smokeY"; $name =~ tr/[a-z]/[A-Z]/; print "name=$name"; Would output the following Name=SMOKEY
A Full Pattern Matching Example 1. #!/usr/local/bin/perl 2. use CGI ':standard'; 3. print header, start_html('Command Search'); 4. @PartNums=( 'XX1234', 'XX1892', 'XX9510'); 5. $com=param('command'); 6. $prod=param('uprod'); 7. if ($com eq "ORDER" || $com eq "RETURN") { 8. $prod =~ s/xx/XX/g; # switch xx to XX 9. if ($prod =~ /XX/ ) { 10. foreach $item ( @PartNums ) { 11. if ( $item eq $prod ) { 12. print "VALIDATED command=$com prodnum=$prod"; 13. $found = 1; 14. } 15. } 16. if ( $found != 1 ) { 17. print br,"Sorry Prod Num=$prod NOT FOUND"; 18. } 19. } else { 20. print br, "Sorry that prod num prodnum=$prod looks wrong"; 21. } 22. } else { 23. print br, "Invalid command=$com did not receive ORDER or RETURN"; 24. } 25. print end_html;
Using Regular Expressions • regular expressions to enable programs to match patterns more completely . • They actually make up a small language of special matching operators that can be employed to enhance the Perl string pattern matching.
The Alternation Operator • Alternation operator looks for alternative strings for matching within a pattern. • (That is, you use it to indicate that the program should match one pattern OR the other). The following shows a match statement using the alternation operator (left) and some possible matches based on the contents of $address (right); this pattern matches either com or edu.
Parenthesis For Groupings • You use parentheses within regular expressions to specify groupings. For example, the following matches a$name value of Dave or David.
Special Character Classes • Perl has a special set of character classes for short hand pattern matching • For example consider these two statements if ( $name =~ m/ / ) { will match $name with embedded space char if ($name =~ m/\s/ ) { will match $name with embedded space, tab, newline