You are on page 1of 55

Introduction to Perl Part I

By: Cdric Notredame (Adapted from BT McInnes)

What is Perl?
Perl is a Portable Scripting Language No compiling is needed. Runs on Windows, UNIX, LINUX and cygwin Fast and easy text processing capability Fast and easy file handling capability

Written by Larry Wall


Perl is the language for getting your job done.

Too Slow For Number Crunching


Ideal for Prototyping
2

How to Access Perl


To install at home Perl Comes by Default on Linux, Cygwin, MacOSX www.perl.com Has rpm's for Linux www.activestate.com Has binaries for Windows Latest Version is 5.8 To check if Perl is working and the version number % perl -v

Resources For Perl


Books:

Learning Perl

By Larry Wall Published by O'Reilly By Larry Wall,Tom Christiansen and Jon Orwant Published by O'Reilly

Programming Perl

Web Site

http://safari.oreilly.com

Contains both Learning Perl and Programming Perl in ebook form

Web Sources for Perl


Web

www.perl.com www.perldoc.com www.perl.org www.perlmonks.org

The Basic Hello World Program


which perl pico hello.pl Program:
#! /path/perl -w print Hello World!\n;

Save this as hello.pl Give it executable permissions

chmod a+x hello.pl ./hello.pl


6

Run it as follows:

Hello World Observations


.pl extension is optional but is commonly used
The first line #!/usr/local/bin/perl tells UNIX where

to find Perl -w switches on warning : not required but a really good idea

Variables and Their Content

Numerical Literals
Numerical Literals

6 12.6 1e10 6.4E-33 4_348_348

Integer Floating Point Scientific Notation Scientific Notation Underscores instead of commas for long numbers

String Literals
String Literals

There is more than one way to do it! 'Just don't create a file called -rf.' Beauty?\nWhat's that?\n Real programmers can write assembly in any language.

Quotes from Larry Wall


10

Types of Variables
Types of variables: Scalar variables : $a, $b, $c Array variables : @array Hash variables : %hash File handles : STDIN, STDOUT, STDERR Variables do not need to be declared Variable type (int, char, ...) is decided at run time $a = 5; # now an integer

$a = perl;

# now a string
11

Operators on Scalar Variables


Numeric and Logic Operators Typical : +, -, *, /, %, ++, --, +=, -=, *=, /=, ||, &&, ! ect Not typical: ** for exponentiation
String Operators Concatenation: . - similar to strcat $first_name = Larry; $last_name = Wall; $full_name = $first_name . . $last_name;

12

Equality Operators for Strings


Equality/ Inequality : eq and ne

$language = Perl; if ($language == Perl) ... # Wrong! if ($language eq Perl) ... #Correct

Use eq / ne rather than == / != for strings

13

Relational Operators for Strings


Greater than

Numeric : >

String : gt

Greater than or equal to

Numeric : >=
Numeric : < Numeric : <=

String : ge
String : lt String : le

Less than

Less than or equal to

14

String Functions
Convert to upper case

$name = uc($name);
$name = ucfirst($name);

Convert only the first char to upper case

Convert to lower case

$name = lc($name); $name = lcfirst($name);


15

Convert only the first char to lower case

A String Example Program


Convert to upper case

$name = uc($name); Convert only the first char to upper case $name = ucfirst($name);

Convert to lower case

$name = lc($name); Convert only the first char to lower case $name = lcfirst($name);

#!/usr/bin/perl $var1 = larry; $var2 = moe; $var3 = shemp; Output: Larry, MOE, sHEMP

16

A String Example Program


#!/usr/local/bin/perl $var1 = larry; $var2 = moe; $var3 = shemp; print ucfirst($var1); print uc($var2); print lcfirst(uc($var3)); # Prints 'Larry' # Prints 'MOE' # Prints 'sHEMP'

17

Variable Interpolation
Perl looks for variables inside strings and replaces

them with their value


$stooge = Larry print $stooge is one of the three stooges.\n;

Produces the output:


Larry is one of the three stooges.
This does not happen when you use single quotes print '$stooge is one of the three stooges.\n;

Produces the output:


$stooge is one of the three stooges.\n
18

Character Interpolation
List of character escapes that are recognized

when using double quoted strings


\n \t \r

newline tab carriage return

Common Example :

print Hello\n; # prints Hello and then a return


19

Numbers and Strings are Interchangeable


If a scalar variable looks like a number and Perl needs

a number, it will use it as a number

$a = 4; print $a + 18; # $b = 50; # print $b 10;

# a number prints 22 looks like a string, but ... # will print 40!

20

Control Structures: Loops and Conditions

If ... else ... statements


if ( $weather eq Rain ) { print Umbrella!\n; } elsif ( $weather eq Sun ) { print Sunglasses!\n; } else { print Anti Radiation Armor!\n; }
22

Unless ... else Statements


Unless Statements are the opposite of if ... else

statements.
unless ($weather eq Rain) { print Dress as you wish!\n; } else { print Umbrella!\n; }

And again remember the braces are required!


23

While Loop
Example : $i = 0; while ( $i <= 1000 ) { print $i\n; $i++; }

24

Until Loop
The until function evaluates an expression

repeatedly until a specific condition is met.


Example:

$i = 0; until ($i == 1000) { print $i\n; $i++; }


25

For Loops

Syntax 1: for ( $i = 0; $i <= 1000; $i=$i+2 ) { print $i\n; }


Syntax 2: for $i(0..1000) { print $i\n; }
26

Moving around in a Loop


next: ignore the current iteration last: terminates the loop. What is the output for the following code snippet: for ( $i = 0; $i < 10; $i++) { if ($i == 1 || $i == 3) { next; } elsif($i == 5) { last; } else {print $i\n;} }
27

Answer

0 2 4

Exercise
Use a loop structure and code a program that

produces the following output:


A AA AAA AAAB AAABA AAABAA AAABAAA AAABAAAB .. TIP: $chain = $chain . A;
29

Exercise
#! /usr/bin/perl for ($i=0, $j=0; $i<100; $i++) { if ( $j==3){$chain.=B;$j=0;} else {$chain.=A; $j++;} print $chain\n; }

30

Exercise: Generating a Random Sample


A study yields an outcome between 0 and 100

for every patient. You want to generate an artificial random study for 100 patients:
Patient 1 99 Patient 2 65 Patient 3 89 . Tip: - use the srand to seed the random number generator -use rand 100 to generate values between 0 and 100 : rand 100

31

Exercise
for ($i=0; $i<100; $i++) { $v=rand 100; #print Patient $i $v\n; printf Patient %d %.2f\n\n, $i, $v; #%s : chaines, strings #%d : integer #%f : floating points }
32

Collections Of Variables: Arrays

Arrays
Array variable is denoted by the @ symbol @array = ( Larry, Curly, Moe ); To access the whole array, use the whole

array

print @array; # prints : Larry Curly Moe

Notice that you do not need to loop through the whole array to print it Perl does this for you
34

Arrays cont
Array Indexes start at 0 !!!!!

To access one element of the array : use $ Why? Because every element in the array is scalar

print $array[0]\n; # prints : Larry

Question:

What happens if we access $array[3] ?


Answer1 : Value is set to 0 in Perl Answer2: Anything in C!!!!!

35

Arrays cont ...


To find the index of the last element in the

array
print $#array; # prints 2 in the previous # example
Note another way to find the number of

elements in the array:


$array_size = @array; $array_size now has 3 in the above example because there are 3 elements in the array
36

Sorting Arrays
Perl has a built in sort function Two ways to sort: Default : sorts in a standard string comparisons order sort LIST Usersub: create your own subroutine that returns an integer less than, equal to or greater than 0 Sort USERSUB LIST The <=> and cmp operators make creating sorting subroutines very easy

37

Numerical Sorting Example


#!/usr/local/bin/perl -w @unsortedArray = (3, 10, 76, 23, 1, 54); @sortedArray = sort numeric @unsortedArray; print @unsortedArray\n; # prints 3 10 76 23 1 54 print @sortedArray\n; # prints 1 3 10 23 54 76 sub numeric { return $a <=> $b; } # Numbers: $a <=> $b : # Strings: $a cpm $b :

-1 if $a<$b , 0 if $a== $b, 1 if $a>$b -1 if $a<$b , 0 if $a== $b, 1 if $a>$b


38

String Sorting Example


#!/usr/local/bin/perl -w @unsortedArray = (Larry, Curly, moe); @sortedArray = sort { lc($a) cmp lc($b)} @unsortedArray;

print @unsortedArray\n; # prints Larry Curly moe


print @sortedArray\n; # prints Curly Larry moe

39

Foreach
Foreach allows you to iterate over an array Example: foreach $element (@array) { print $element\n; } This is similar to : for ($i = 0; $i <= $#array; $i++) { print $array[$i]\n; }
40

Sorting with Foreach


The sort function sorts the array and returns the list in

sorted order. Example :


@array( Larry, Curly, Moe); foreach $element (sort @array) { print $element ; }

Prints the elements in sorted order:

Curly Larry Moe


41

Exercise: Sorting According to Multiple Criterion

Use the following initialization to sort individuals by age and then by income: Syntax
@sortedArray = sort numeric @unsortedArray; sub numeric { return $a <=> $b; } Data

@index=(0,1,2,3,4); @name=(V,W,X,Y,Z); @age=(10,20, 15, 20, 10); @income=(100,670, 280,800,400);

Output:
Name X Age A Income I Tip: -Sort the index, using information contained in the other arrays.

42

Exercise: Sorting According to Multiple Criterion

@index=(0,1,2,3,4,5); @name=(V,W,X,Y,Z); @age=(10,20, 15, 20, 10); @income=(100,670, 280,800,400); foreach $i ( sort my_numeric @index) { print $name[$i] $age[$i] $income[$i]; } sub my_numeric { if ($age[$a] == $age[$b]) {return $income[$a]<=>$income[$b]; } else {return $age[$a]<=>$age[$b]; } }
43

Manipulating Arrays

Strings to Arrays : split


Split a string into words and put into an array @array = split( /;/, Larry;Curly;Moe ); @array= (Larry, Curly, Moe);
# creates the same array as we saw

previously

Split into characters @stooge = split( //, curly ); # array @stooge has 5 elements: c, u, r, l, y

45

Split cont..
Split on any character @array = split( /:/, 10:20:30:40); # array has 4 elements : 10, 20, 30, 40 Split on Multiple White Space @array = split(/\s+/, this is a test; # array has 4 elements : this, is, a, test

More on \s+ later

46

Arrays to Strings
Array to space separated string @array = (Larry, Curly, Moe); $string = join( ;, @array); # string = Larry;Curly;Moe Array of characters to string @stooge = (c, u, r, l, y); $string = join( , @stooge ); # string = curly

47

Joining Arrays cont


Join with any character you want @array = ( 10, 20, 30, 40 ); $string = join( :, @array); # string = 10:20:30:40 Join with multiple characters @array = 10, 20, 30, 40); $string = join(->, @array); # string = 10->20->30->40

48

Arrays as Stacks and Lists


To append to the end of an array : @array = ( Larry, Curly, Moe ); push (@array, Shemp ); print $array[3]; # prints Shemp

To remove the last element of the array (LIFO) $elment = pop @array; print $element; # prints Shemp @array now has the original elements (Larry, Curly, Moe)
49

Arrays as Stacks and Lists


To prepend to the beginning of an array @array = ( Larry, Curly, Moe ); unshift @array, Shemp; print $array[3]; # prints Moe print $array[0]; # prints Shemp To remove the first element of the array $element = shift @array; print $element; # prints Shemp The array now contains only : Larry, Curly, Moe

50

Exercise: Spliting
Instructions Remove

shift: beginning, pop: end Unshift: beginning, push: end

Add

Use split, shift and push to turn the following string:

The enquiry 1 was administered to five couples The enquiry 2 was administered to six couples The enquiry 3 was administered to eigh couples Into five couples were administered the enquiry 1 .
51

Exercise: Spliting
Use split, shift and push to turn the following string:

$s[0]= The enquiry 1 was administered to five couples; $s[1]= The enquiry 2 was administered to six couples; $s[2]= The enquiry 3 was administered to eigh couples; foreach $s(@s) { @s2=split (/was administered to/, $s); $new_s=$s2[1] were admimistered $s2[0]; print $new_s\n; }

52

Multidimentional Arrays

Multi Dimensional Arrays


Better use Hash tables (cf later)

If you need to:

@tab=([Monday,Tuesday], [Morning,Afternoon,Evening]); $a=$tab[0][0] # $a == Monday $tab2=(midnight, Twelve); $tab[2]=\@tab2 # integrate tab2 as the last row of tab

54

Thank you

You might also like