Introduction to Perl

coordinatedcapableSoftware and s/w Development

Nov 4, 2013 (3 years and 11 months ago)

86 views

Introduction to Perl


Part I

By: Cédric Notredame

(Adapted from BT McInnes)

2

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

3

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

4

Resources For Perl


Books:


Learning Perl


By Larry Wall


Published by O'Reilly


Programming Perl


By Larry Wall,Tom Christiansen and Jon Orwant


Published by O'Reilly


Web Site


http://safari.oreilly.com


Contains both Learning Perl and Programming Perl
in ebook form

5

Web Sources for Perl


Web


www.perl.com


www.perldoc.com


www.perl.org


www.perlmonks.org

6

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


Run it as follows:


./hello.pl

7

“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

9

Numerical Literals


Numerical Literals


6






Integer


12.6





Floating Point


1e10





Scientific Notation


6.4E
-
33




Scientific Notation


4_348_348


Underscores instead of







commas for long numbers

10

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

11

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


12

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;

13

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

14

Relational Operators for Strings


Greater than


Numeric :
>




String :
gt


Greater than or equal to


Numeric :
>=




String :
ge


Less than


Numeric :
<




String :
lt


Less than or equal to


Numeric :
<=




String :
le

15

String Functions


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);



16

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

17

A String Example Program

#!/usr/local/bin/perl

$var1 = “larry”;

$var2 = “moe”;

$var3 = “shemp”;


print ucfirst($var1);



# Prints 'Larry'

print uc($var2);




# Prints 'MOE'

print lcfirst(uc($var3));


# Prints 'sHEMP'

18

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


19

Character Interpolation


List of character escapes that are recognized
when using double quoted strings


\
n

newline


\
t

tab


\
r

carriage return



Common Example :



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


20

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;




# a number

print $a + 18;

# prints 22

$b = “50”;


# looks like a string, but ...

print $b


10;

# will print 40!

Control Structures: Loops and Conditions

22

If ... else ... statements



if ( $weather eq “Rain” )


{


print “Umbrella!
\
n”;


}

elsif ( $weather eq “Sun” ) {


print “Sunglasses!
\
n”;

}

else {


print “Anti Radiation Armor!
\
n”;

}

23

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!

24

While Loop


Example :

$i = 0;

while ( $i <= 1000 )


{


print “$i
\
n”;


$i++;

}

25

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++;

}

26

For Loops


Syntax 1:


for ( $i = 0; $i <= 1000; $i=$i+2 )

{


print “$i
\
n”;


}



Syntax 2:


for $i(0..1000)

{


print “$i
\
n”;


}

27

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”;}


}

Answer

0

2

4


29

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”;



30

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”;




}

31

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

32

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


}

Collections Of Variables: Arrays

34

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

35

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!!!!!


36

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

37

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

38

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 :

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

# Strings:


$a cpm $b :

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



39

#!/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

String Sorting Example

40

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”;

}


41

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

42

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.

43

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]; }


}


Manipulating Arrays

45

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

46

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


47

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”

48

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”

49

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”)

50

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”

51

Exercise: Spliting


Instructions


Remove


shift: beginning, pop: end


Add


Unshift: beginning, push: end



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”

….

52

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”;






}






Multidimentional Arrays

54

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

Thank you