SlideShare a Scribd company logo
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
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
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
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
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
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 );
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
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
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 !
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/htmlnn”;
         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” ) );       # <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
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

More Related Content

What's hot (15)

PDF
DBIx::Class beginners
leo lapworth
 
PPTX
PHP Strings and Patterns
Henry Osborne
 
PDF
Smelling your code
Raju Mazumder
 
PPT
Functional Pe(a)rls version 2
osfameron
 
PDF
How to write code you won't hate tomorrow
Pete McFarlane
 
PPT
Class 5 - PHP Strings
Ahmed Swilam
 
PDF
Descobrindo a linguagem Perl
garux
 
PPTX
PHP PPT FILE
AbhishekSharma2958
 
PPT
An Elephant of a Different Colour: Hack
Vic Metcalfe
 
PPTX
PHP Functions & Arrays
Henry Osborne
 
PDF
DBIx::Class introduction - 2010
leo lapworth
 
PDF
PHP for Python Developers
Carlos Vences
 
PPTX
Oops in php
Gourishankar R Pujar
 
PPTX
第二讲 预备-Python基礎
anzhong70
 
PPTX
第二讲 Python基礎
juzihua1102
 
DBIx::Class beginners
leo lapworth
 
PHP Strings and Patterns
Henry Osborne
 
Smelling your code
Raju Mazumder
 
Functional Pe(a)rls version 2
osfameron
 
How to write code you won't hate tomorrow
Pete McFarlane
 
Class 5 - PHP Strings
Ahmed Swilam
 
Descobrindo a linguagem Perl
garux
 
PHP PPT FILE
AbhishekSharma2958
 
An Elephant of a Different Colour: Hack
Vic Metcalfe
 
PHP Functions & Arrays
Henry Osborne
 
DBIx::Class introduction - 2010
leo lapworth
 
PHP for Python Developers
Carlos Vences
 
第二讲 预备-Python基礎
anzhong70
 
第二讲 Python基礎
juzihua1102
 

Viewers also liked (8)

PDF
introduction
tutorialsruby
 
PDF
ASPNET_MVC_Tutorial_06_CS
tutorialsruby
 
PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
BloggingWithStyle_2008
tutorialsruby
 
PDF
Demo-BW_Tutorial-USPG_%20Ed_1-3
tutorialsruby
 
PDF
XSD%20and%20jCAM%20tutorial
tutorialsruby
 
PDF
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
tutorialsruby
 
PDF
forms
tutorialsruby
 
introduction
tutorialsruby
 
ASPNET_MVC_Tutorial_06_CS
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
BloggingWithStyle_2008
tutorialsruby
 
Demo-BW_Tutorial-USPG_%20Ed_1-3
tutorialsruby
 
XSD%20and%20jCAM%20tutorial
tutorialsruby
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
tutorialsruby
 
Ad

Similar to tutorial7 (20)

PDF
Perl intro
Kanchilug
 
PDF
Practical approach to perl day1
Rakesh Mukundan
 
PDF
Perl Scripting
Varadharajan Mukundan
 
PDF
Lecture19-20
tutorialsruby
 
PDF
Scripting3
Nao Dara
 
PPT
Basic perl programming
Thang Nguyen
 
PDF
Lecture 22
rhshriva
 
PDF
Lecture4
tutorialsruby
 
PDF
Lecture4
tutorialsruby
 
PDF
Unit VI
Bhavsingh Maloth
 
PPT
Perl Intro 2 First Program
Shaun Griffith
 
PDF
Tutorial perl programming basic eng ver
Qrembiezs Intruder
 
PDF
perl_lessons
tutorialsruby
 
PPTX
Perl slid
pacatarpit
 
PPT
Introduction to Perl
NBACriteria2SICET
 
PDF
First steps in PERL
Brahma Killampalli
 
PPT
7.1.intro perl
Varun Chhangani
 
PDF
Perl_Tutorial_v1
tutorialsruby
 
PDF
Perl_Tutorial_v1
tutorialsruby
 
PDF
Learning Perl 6
brian d foy
 
Perl intro
Kanchilug
 
Practical approach to perl day1
Rakesh Mukundan
 
Perl Scripting
Varadharajan Mukundan
 
Lecture19-20
tutorialsruby
 
Scripting3
Nao Dara
 
Basic perl programming
Thang Nguyen
 
Lecture 22
rhshriva
 
Lecture4
tutorialsruby
 
Lecture4
tutorialsruby
 
Perl Intro 2 First Program
Shaun Griffith
 
Tutorial perl programming basic eng ver
Qrembiezs Intruder
 
perl_lessons
tutorialsruby
 
Perl slid
pacatarpit
 
Introduction to Perl
NBACriteria2SICET
 
First steps in PERL
Brahma Killampalli
 
7.1.intro perl
Varun Chhangani
 
Perl_Tutorial_v1
tutorialsruby
 
Perl_Tutorial_v1
tutorialsruby
 
Learning Perl 6
brian d foy
 
Ad

More from tutorialsruby (20)

PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
tutorialsruby
 
PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
Standardization and Knowledge Transfer – INS0
tutorialsruby
 
PDF
xhtml_basics
tutorialsruby
 
PDF
xhtml_basics
tutorialsruby
 
PDF
xhtml-documentation
tutorialsruby
 
PDF
xhtml-documentation
tutorialsruby
 
PDF
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
PDF
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
PDF
HowTo_CSS
tutorialsruby
 
PDF
HowTo_CSS
tutorialsruby
 
PDF
BloggingWithStyle_2008
tutorialsruby
 
PDF
cascadingstylesheets
tutorialsruby
 
PDF
cascadingstylesheets
tutorialsruby
 
PDF
Winter%200405%20-%20Advanced%20Javascript
tutorialsruby
 
PDF
Winter%200405%20-%20Advanced%20Javascript
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
Standardization and Knowledge Transfer – INS0
tutorialsruby
 
xhtml_basics
tutorialsruby
 
xhtml_basics
tutorialsruby
 
xhtml-documentation
tutorialsruby
 
xhtml-documentation
tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
HowTo_CSS
tutorialsruby
 
HowTo_CSS
tutorialsruby
 
BloggingWithStyle_2008
tutorialsruby
 
cascadingstylesheets
tutorialsruby
 
cascadingstylesheets
tutorialsruby
 
Winter%200405%20-%20Advanced%20Javascript
tutorialsruby
 
Winter%200405%20-%20Advanced%20Javascript
tutorialsruby
 

Recently uploaded (20)

PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Biography of Daniel Podor.pdf
Daniel Podor
 

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: [email protected] 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 !
  • 10. 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/htmlnn”; print “<html><head> n”; print “<title> foo title </title></head> n”; print “<body>” …………….. Print “</body></html> 10
  • 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