Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
tutorial7
1. 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
1
2. 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!
2
3. 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: 3
§ $Name = “John”; # Visible in the whole program
my $Name = “John”; # Visible in the block it is declared in
4. 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
4
5. Perl – Control , Loops and Functions
ØControl statements:
§ If statement: Unless Statement
if( $Size < 10.0 ) { unless( $Name eq “John Black” ){
print( "Length is too small!n" ); print( “ You are not John Black” );
} }
elsif ( $Size > 100.0 ) {
print( "Length is too big!n" );
}
else{
print( "Length is just right!n" );
}
Ø Looping:
§ While Loops: For Loops:
while( $n <= 10 ) { for( $n = 1; $n <= 10; ++$n ) {
printf( "%d squared is %dn", $n, $n*$n ); printf( "%d squared is %dn", $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 %dn", $n, $n*$n );
}
Ø Functions
§ e.g.:
sub func1{
my($param1,$param2) = @_; # parameters are passed in an array called @_
print "Inside func";
$param1 * $param2; # same as return($param1 * $param2 );
}
print(" Before calling func1");
$result = func1( 10,20 ); 5
print(" After calling func1");
print(" result : $result"); # prints result: 200
6. Perl – Functions cont’d
Ø 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’ ); 6
@longFoods = grep( length($_) > 6 , @foods );
7. Perl – Functions cont’d
# 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.10sn” , $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
7
8. 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>; # Reads one complete line from standard input
$ProgramArguments = <ARGV>; # Refer to arguments on the command line.
# e.g. perl prog param1 param2 param3
§ Files:
open( IN, “<test.dat" ); # Associates file handle with file
$Line = <IN>; # Reads the first line
close( IN );
8
9. Perl – Program Structure
Ø Perl Files (.pl) vs Perl Modules (.pm)
File.pl File.pm
§ Where is main()?
ØRequire Statement func1
§ Causes the Perl interpreter to “execute” the code in the require d file!
# foo.pl
func2
perl code
more perl code….
some code
1;
#-----------------------------------------------
# Poo.pl
require “foo.pl”;
perl code # you can call functions in foo.pl
Ø 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 9
Ø use strict;
§ Forces Perl interpreter to be strict in using types. Will save you a lot of time !
11. Perl - cgi.pm
Ø Using cgi.pm
use strict;
use CGI qw(:standard);
print ( header( ) );
print( start_html( “Anna Web Page” ) ); # <html><head><title>Anna Web Page</title></head><body>
print( table( ….) );
print( a(…) ); # <a href=“”> xyz </a>
print( radio_group(…..) );
print( end_html( ) ); # </body></html>
11
12. Assignment 3
Ø What is it about? Client(Web-Browser) Server(HTTP Server)
HTML/ Perl/
Ø What can you do right now? JavaScript/ CGI/
§ HTML (design and layout of the web pages) Cookies Cookies
§ JavaScript (validations)
SMTP POP3
Ø What you need to learn?
§ Perl
§ Cookies
§ CGI SMTP Server POP3 Server
12