Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

Programming on the Web(CSC309F)

Tutorial 7: Perl TA:Wael Abouelsaadat


WebSite: http://www.cs.toronto.edu/~wael Office-Hour: Friday 12:00-1:00 (SF2110) Email: wael@cs.toronto.edu

Introduction to Perl
History of Perl!
Initially developed by Larry Wall (English major student then!) in 1987. Modules continuously added since version 2.0 Latest version is Perl 5.6.1 Ported to 83 platforms. Most popular scripting language for server-side web development.

Pros && Cons:


Powerful in manipulating textual data. A very rich set of pattern-matching operations (used extensively in text-searching, NLP systems,). Rich set of functions (via Perl modules). Allow you to get the job done very quickly (but not necessarily elegantly! ). No GUI library. Weird syntax (greatly reduces maintainability of Perl progra ms). Perl is an interpreted language. Unix influence (originally built as a replacement for shell scripts and awk).

helloworld.pl
Source: print ( Hello to Perl World! ); print Hello to Perl World!; # yes, no brackets! Run it: C:\> perl helloworld.pl Hello to Perl World!Hello to Perl World!

Perl Data types


Specifying Types and Containers:
Variables are not explicitly declared. Perl interpreter guesses the type from the way the variable is written. $var - names a variable that holds a scalar data type (integer, floating point or string). @var - names a variable that holds an array of scalars, or list. %var - names a variable that holds an associative array of scalars. &var - names a subroutine. E.g.
#Defining a scalar $Name = "Jack"; $Age = 10; #Defining and handling an array @Colors = ("Red","Pink","Yellow"); $FirstColor = $Colors[0]; print( $FirstColor ); # Outputs Red $Colors[0] = "White"; print( $Colors[0] ); # Outputs White $Colors[100] = Blue; # This is valid because Arrays in Perl are dynamic in size print( $Colors[100] ); # Outputs Blue print( $#Colors ); # Prints 100 which is the last index of the array. This is a unique variable # defined by the perl interpreter to give you access to current size of array # Defining and handling a hash table %Address = ("Apartment" => 101, "Street" => "Bloor", "City" => "Toronto"); $streetName = $Address{"Street"}; print( $streetName ); # Outputs Bloor $Address{"City"} = "Ottawa"; print( $Address{"City"} ); # Outputs Ottawa delete $Address{"City"}; @tkeys = keys(%Address); # keys function returns an array of the keys in the hash table

Global vs. Local variables:


$Name = John; my $Name = John; # Visible in the whole program # Visible in the block it is declared in

Perl Strings
Strings:
Difference between using the single quote (') and the double quote (") to delimit strings: $Client = 'John Luu'; @Items = ( "Chocolate", "Biscuits", "Milk"); $Total = 60; $Transaction = "$Client is buying @Items for \$ $Total"; print( $Transaction ); # Outputs John Luu is buy ing Chocolate Biscuits Milk for $ 60 Concatenating Strings: $FirstName = John'; $LastName = Black; $FullName = $First Name . $LastName ; # FullName is now John Black String operators: # lt: less than , le: less or equal , eq: equal , ge: greater or equal , ne: not equal , eq: equal $Val1 = 1.1; $Val2 = 1.0; $Val3 = bbb; $Val4 = aaa; if( ($Val1 gt $Val2) && ($Val3 lt $Val4 ) ) Pattern matching:
# =~:

does match , !~: does not match $CatString = tomcat if ( $CatString =~ /cat/ ) . # Right-hand-side of these operators must always be a regular expression

Perl Control , Loops and Functions


Control statements:
If statement: if( $Size < 10.0 ) { print( "Length is too small!\n" ); } elsif ( $Size > 100.0 ) { print( "Length is too big!\n" ); } else{ print( "Length is just right!\n" ); } Unless Statement unless( $Name eq John Black ){ print( You are not John Black ); }

Looping:
While Loops: while( $n <= 10 ) { printf( "%d squared is %d\n", $n, $n*$n ); $n = $n + 1; } For-each Loops: @Digits = (0,1,2,3,4,5,6,7,8,9); foreach $n (@Digits) { printf( "%d squared is %d\n", $n, $n*$n ); } For Loops: for( $n = 1; $n <= 10; ++$n ) { printf( "%d squared is %d\n", $n, $n*$n ); }

Functions
e.g.: sub func1{ my($param1,$param2) = @_; print "Inside func"; $param1 * $param2; } print(" Before calling func1"); $result = func1( 10,20 ); print(" After calling func1"); print(" result : $result"); # parameters are passed in an array called @_ # same as return($param1 * $param2 );

5
# prints result: 200

Perl Functions contd


Perl built-in functions:
Debugging Functions # caller( ) # Unwinds the calling stack: ($package, $filename, $line,$SubName , $args,$$contentxt) = caller( $frame ); a( ); sub a { b(); } sub b { c(); } sub c { print ( @{ [ caller(1) ] } ); } # Outputs main script.pl 2 main::b 1 0 # die( ) # Kills a process at a given point. open ( REPORT_FILE, ">report.txt" ) || die " Error opening report.txt $! \n " ; # The above translates to if( open( .) continue ) else { die . } # warn( ) # Does the same thing as die but does not exit. Time Functions # ($secs , $min, $hr, $mday, $mnth, $yr, $wd, $yd, $ds ) = localtime ( ); Gets local time # ($user, $system, $child_user, $child_system ) = times( ); Benchmark code # sleep( $seconds ); Variable Functions # sort() Sorts an array in alphabetical order, or by a user-defined function. @DestArray = ( Apples, Bananas, Carrots ); @NewArray = sort( @DestArray ); #Be carefull with arrays of numbers # split() Takes a scalar and separates it based on on the criteria us er provides # @NewArray = split( $text, $ScalarName ); $text can be delimiter or regular expression @splitArray = spli( , , $scalarName ); # grep() Finds which element in an array satisfies a condition. #@NewArray = grep( EXPRESSION , @arrayToMatch ); @Foods = ( turkey, lucky charms , oranges ); @longFoods = grep( length($_) > 6 , @foods );

Perl Functions contd


# map() Makes a new array based on a transform from the old array. # @NewArray = map( &function, @source_array ); @NewArray = map( MyFunc ( $_ ) , @SourceArray ); File Functions # $bytes = read( FILEHANDLE, $scalar, $length, $offset ) Open( FILEHANDLE, file ); $bytes = read( FILEHANDLE, $input, 40, 20 ); # reads 40 characters from file into $input starting at 20 #printf [FILEHANDLE] $format_string, @arrayOfValues; use FileHandle; my $Fhandle = new FileHandle( > my_file ); $longvarb = This has 23 chars in it; printf $Fhandle %10.10s\n , $longvarb; String Functions #chop( ) Deletes the last character in a scalar. If applied to Array, hash => does the same! $line = Please chop the letter T; chop( $line ); # chomp( ) Deletes the new line character, at the end of the line, if exists. # More funs: chr, crypt, hex, index, lc, length, oct, ord, pack, reverse, rindex, sprintf, substr, uc, ucfirst Array Functions #pop, push, shift, splice, unshift Hash Functions # delete, each, exists, keys, values I/O Functions # binmode , close, closedir, dbmclose, dbmopen, eof, fileno, flock, format, getc, print, printf, read, readdir, # rewinddir, seek, seekdir, select, syscall, sysread, sysseek, syswrite, tell, telldir, truncate, write Files/Directories Functions # -X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir, readlink, rename, # rmdir, stat, symlink, umask, unlink, utime

Perl Input and Output


Printing Output:
Standard Output: print( STDOUT "Hello World!\n" ); print( "Hello World! \n" ); Files: open( OUT, ">test.dat" ); # Associates file handle with file print( OUT This text will be written in the file " );

Reading input:
Standard Output: $NewLine = <STDIN>; $ProgramArguments = <ARGV>; Files: open( IN, <test.dat" ); $Line = <IN>; close( IN ); # Associates file handle with file # Reads the first line # Reads one complete line from standard input # Refer to arguments on the command line. # e.g. perl prog param1 param2 param3

Perl Program Structure


Perl Files (.pl) vs Perl Modules (.pm)
Where is main()?
File.pl func1 File.pm

Require Statement
Causes the Perl interpreter to execute the code in the require d file! # foo.pl perl code more perl code. 1; #----------------------------------------------# Poo.pl require foo.pl; perl code # you can call functions in foo.pl

func2 some code

Defining a Perl package and the use statement


Semi-Object Oriented Programming! Creates a namespace. # Student.pm #!/usr/sbin/perl package Student; sub new { # Initialization code } sub printDetails{ # perl code .. } #------------------------------# foo.pl use Student; # Like inc lude in C++ $new_student = new Student( ); $new_student->printDetails( );

Another way to use use !


Use CGI qw(); # Uses a specific function in a module: qw

use strict;
Forces Perl interpreter to be strict in using types. Will save you a lot of time !

Perl - CGI
Handling Query String
# dispatcher.pl use strict; # Retrieving query string $request_method = $ENV{REQUEST_METHOD}; if( $request_method eq GET ){ $query_string = $ENV{QUERY_STRING}; } elsif ( $request_method eq POST ){ read( STDIN , $query_string, $ENV{CONTENT_LENGTH} ); } else{ print(Invalid Request Method !); exit( 1 ); } # Extracting name -value pairs from query string (param1=value1&param2=value2&..) @name_value_paris = split( /&/, $query_string ); foreach $name_value (@name_value_pairs){ ($name, $value ) = split( /=/, $name_value ); #more Perl code.. }

Generating HTML
print Content-type: text/html\n\n; print <html><head> \n; print <title> foo title </title></head> \n; print <body> .. Print </body></html>

10

Perl - cgi.pm
Using cgi.pm
use strict; use CGI qw(:standard); print ( header( ) ); print( start_html( Anna Web Page ) ); print( table( .) ); print( a() ); print( radio_group(..) ); print( end_html( ) );

# <html><head><title>Anna Web Page</title></head><body> # <a href=> xyz </a> # </body></html>

11

Assignment 3
What is it about?
Client(Web-Browser) Server(HTTP Server)

What can you do right now?


HTML (design and layout of the web pages) JavaScript (validations)

HTML/ JavaScript/ Cookies

Perl/ CGI/ Cookies

What you need to learn?


Perl Cookies CGI

SMTP

POP3

SMTP Server

POP3 Server

12

You might also like