perl

48
Perl data, scalar data types and control structures

Upload: xantha-hopkins

Post on 30-Dec-2015

19 views

Category:

Documents


0 download

DESCRIPTION

Perl. data, scalar data types and control structures. General information about Perl. PERL stands for P ractical E xtraction and R eport L anguage OR P athologically E clectic R ubbish L ister Perl's chief creator is Larry Wall (endorses both names) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Perl

Perl

data, scalar data types and control structures

Page 2: Perl

General information about Perl

• PERL stands for Practical Extraction and Report Language OR Pathologically Eclectic Rubbish Lister—Perl's chief creator is Larry Wall (endorses both

names)

• These slides will cover perl version 5.8+—ActivePerl 5.X (for windows)

– http://www.activestate.com/Products/Language_Distributions/ choose ActivePerl Download link, then the MSI package.

• Perl is a script language—You must have the perl interrupter installed in

order to run perl scripts.

Page 3: Perl

• Perl as a language—It has incorporated structures for many languages

such as c/c++, Lisp, FORTAN, and PL/I—And shell languages like bash, tcsh, and zsh

– This also means there are several ways to write the same statement. (see the hello world slide for a simple example)

—It has also added the functionality of many UNIX programs such as awk (and it’s syntax). Plus many other programs.

—Also it is case sensitive.—And uses type less data structures.

• Perl major strengths are in string manipulations and modules (to add extra functionality).

Page 4: Perl

Getting help

• On UNIX only—man <perlfunc> where perfunc is the perl

function you need help with or information on

• On Windows and UNIX—perldoc <perlfunc>—perldoc –f <perlfunc>

• On the Web—http://www.perldoc.com

• Texts:—Learning Perl, Schwartz and Christiansen,

O'Reilly, 2000—Programming Perl, Wall, Christiansen and

Orwant, O'Reilly, 2000– Considered to be the Perl bible by many people.

Page 5: Perl

The hello world script

#!/usr/bin/perlprint “hello World\n”; # normal print statement• ORprintf (“hello World\n”); #c like print statement• ORprint (“hello World\n”); # normal print

statement• ORprintf “hello World\n” ; #c like print statement

• Either of the 4 statements will work.

Page 6: Perl

Comments

• Perl uses the # as a comment.• Start with the # and the comment ends at

the end of the line.• At the beginning of a line

—#this is a comment

• As in the last slide, it can be after statement(s)—print "Hi\n"; # comment

• There is no multi-line comment, like c/c++—Must comment each line.

Page 7: Perl

Multiple line comments Perl has added a multiple line comment.

Uses the = and cut Example=commentThis a comment=cut The = comment (or choose your own

word) to =cut is a multiple line comment A note: If you have a syntax error before

the comment, perl will likely give you an error in the comment. A stray } in the comment may cause problems as well.

Page 8: Perl

Data

• Scalar data—numbers and strings of characters—4, 3.25, hello, etc.

• Numbers—Although we use integer and real numbers,

perl computes all numbers internally as double-precision floating-points values

– But you won’t notice.

—Also don’t look for integer operations as they don’t exist.

—floating point numbers, same as c language– 1.25, 7.25e45, -6.5e24, -12e-24, -1.2e-23

Page 9: Perl

Data (2)

• Don't start a number with a Zero, unless it is the number zero.

• 0377 is 377 octal or 255 decimal• 0xff is hex ff or 255 decimal

—Both can use the negative sign as well.

• Note: string to number conversions, the leading zero(s) are ignored and assumed to be decimal.

Page 10: Perl

strings

• The entire 256 character set can be used—NULL is not special in perl.

• Single-quoted —You can use any characters inside the single

quotes– except a single quote.– To use a single quote inside single quotes, you must

backslash the quote. example: '\' ' is a single quote.– To use a backslash followed by a single quote, you

need to backslash it. example: '\\\' ' gives you a \'

—‘hello’ is the five characters h, e, l, l, o—‘hello\n’ is hello\n—‘hello

there’ produces hello there

Page 11: Perl

Strings(2)

• Double-quotes, (acts like C strings)—“hello world\n” produces hello world and a

newline—“new \007” produces new and bell sound—“Hello\tthere” produces Hello (tab) there—Some of the \ characters

– \n newline, \r return, \t tab, \b backspace, \a bell– \\ backslash, \” double quote, \cC <cntrl>-c– \007 Any octal ASCII value (007 is the bell)– \x7f Any hex ASCII value, (7f is delete)– \l lower case next letter, \L lower all letters until \E– \u upper case next letter, \U upper all letters until \E

• To test any of these, use the print command—so print “new \007” or print ‘hello\n’

Page 12: Perl

Scalar Variables

• All scalar variables start with a $—So $i or $name

• equal sign works as normal—$i = 1 or $name= “Jim Ward”

• Perl does not require you to declare variables, especially since variables are type less—$i =1; #So $i has a number—$i = “Jim Ward”; # is a perfectly legal next statement.

• To declare a variable, you use the my operator—my $i; —We'll look a variable scope later on, when get to

subroutines. Right now, all variables are global

Page 13: Perl

Operators

• numeric operators—same as c/c++ (without integer operators)—2 +3 (result 5), 2.1 -1.4 (result .7)—2 * 3 (result 6), 10 / 5 (result 2)—10.2 / 0.3 (result 34), 10 / 3 (result 3.33333…)—10 % 3 (10 mod 3 = 1)—exponentiation (FORTAN like)

– 2**3 (result 8) If the result is to big, you’ll get an error

• logical operators for numeric data—< <= == >= > != || (or) && (and)—produces a true/false value 5 > 2 = true

Page 14: Perl

Operators (2)

• There is one integer operator• You can cast any floating point number to

integer number using int• Examples:$i = int 10.3;print "$i \n"; #output: 10

$i = int 10 / 3; # the result is 3

Page 15: Perl

Quick word about True and False

• Perl uses the true/false standard of c/c++, with a perl twist.

• False—Zero, as well as the string "0"

– the string "0" is converted to Zero

—The empty string ""—Any undefined value (undef is reserved word

for it)– The last two happen more often than you might think.

• True—All negative and positive numbers—All non-empty strings (except "0")—Any defined variable that is not Zero, "", or "0".—IE: Anything not false

Page 16: Perl

Operators for Strings

• Logical operators—uses FORTRAN notation—eq (==), ne (!=), lt (<), gt (>), le (<=), ge

(>=), || and &&

• Why different operators?—because of conversions using string operators 7

is greater then 30, since it uses the first number to decide, ie “7” > “3”, so “7” > “30”

• More operators—concatenation “hello”.”world” produces

“helloworld”—string repetition uses an x

– “jim” x 3 produces “jimjimjim”– “jim” x (4-2) produces “jimjim”– 3 x 4 produces “3333” or (2+1) x 4 produces “3333”

Page 17: Perl

Converting between numbers and strings• perl does it for you, but not always the way you

think it should—print 4 * “2f”; produces 8—perl quietly and simply removes all non-numbers when

doing arithmetic operations.

• Converting to strings is very easy—$var = “x”. (4 * 2) produces “x8”—Even $var = “x”. 4*2 produces “x8”

– NOTE: $x = 4.23 is a floating value of 4.23– while $x = “4”. 23 and $x= “4”.”23”produces “423”– $x = 4. “23” results in an error (4.[a float] “23”, and no

operator).+ But $x= 4 . “23” works (note the space between 4 and the dot)

• Perl will does most of the work for you. To generate warnings see the Pragmas slide, then the first result, will warn you (but still do the operation).

Page 18: Perl

binary operators

• $a += $b; # $a = $a + $b;• $a -= $b;• $a *= $b;• $a /= $b; # $a = a / b;• ++$a; $a++; ++($a + $b);• --$a; $a--;• $a .= “ this”; #$a = $a . “ this”;

Page 19: Perl

chop and chomp

• chop removes the last character in the string—$x = “hello world”;—chop($x) #$x now has “hello worl”—$char = chop($x);

– $char has “l” and $x is “hello wor”

—You don’t have a variable in front of chop, it will throw away the result

—$x =""; chop($x); # $x still contains "";

• $x = “hello there\n”;• chop($x) #$x is “hello there”• chop($x) #$x is now “hello ther”

Page 20: Perl

chop and chomp (2)

• chomp only removes the newline character

• $x = “hello there\n”;• chomp($x) #$x is “hello there”• chomp($x) # $x is still “hello there”

Page 21: Perl

Variables and strings

• Examples of using variables inside strings• $fname = “jim”; $lname = “ward”;• $name = $fname . ’ ’ .$lname;

—OR $name = “$fname $lname”;—produce “jim ward”;

• $name = '$fname $lname';—produces '$fname $lname'

• use \u to upper next character—$name = “\u$fname \u$lname”;—produces “Jim Ward”

Page 22: Perl

standard in and standard out

• <STDIN> (must be capped)—read in a until end line marker from the

standard in.—$a = <STDIN>; place input into $a—chomp($a); #remove EOL marker—print $a;

• <STDOUT> (again capped)—rarely used, since print by default goes to

standard out—print <STDOUT>, $a; same as print $a;

Page 23: Perl

Creating a Perl script

• Create a text file with the perl script.• UNIX

—Need to tell the script where perl is located—#!/usr/bin/perl

– For linux machines.

• For Windows—The file extension needs to be .pl

– That is the extension that windows associates with perl, when ActivePerl is installed.

• Many people put the #! ... perl in the files, even on windows and use the .pl extension on UNIX—Mostly for consistently between the two

platforms.

Page 24: Perl

Exercise 1

• Write a perl script that reads in a temperature in Fahrenheit and prints out the equivalent Celsius—Celsius = (Fahrenheit – 32) * 5 /9

—You will need <STDIN>, chomp, some arithmetic operations and a couple of print statements

Page 25: Perl

Statements in perl

• The next set of slides will give you the syntax of the statements as well as many of variant syntax of the statements.—Some of the variants can be somewhat

confusing.

• First perl assumes a block of statements for all structures unless otherwise noted.

• Blocks of statements, uses the { } syntax—semicolons are required inside the block, but

not after the block itself.—note: perl assumes a semicolon after }

Page 26: Perl

If and unless statements

if (T/F)block

if (T/F) blockelse block

if (T/F)block

elsif (T/F) block• can include more elsifs and 1

else

unless (T/F)block

unless (T/F)block

elseblock

unless (T/F)block

elsif (T/F) block• can include more elsifs and 1

else

Page 27: Perl

• unless reverses the true and false side of the statement—If (T/F) true else false—unless (T/F) false else true

• using a single statement, instead of a blockstatement if (T/F); #No ; between statement and if

statement unless (T/F); #No ; between statement and unless

—There is no elsif or else part of these statement—A block in front will produce an error, because }

assumes a ; after, so it's a syntax error

Page 28: Perl

trinary operator (like an if-then-else)

• COND ? THEN : ELSE—Can’t be statements, but can be nested

• $a = (T/F) ? $b : $c; if true $a=$b else $a=$c

• nested (leap year example)$leapyear =

$year % 4 ? 0 :$year % 100 ? 1 :

$year % 400 ? 0 : 1;—remember true is Non-zero, false = 0

• Makes for very unable code.

Page 29: Perl

• Perl allows trinary operations on the left side as well

($a_or_b ? $a : $b) = $c;—So $c is assigned to either $a or $b, depending

on $a_or_b—Leads to really unreadable code.

Page 30: Perl

Loops

• Many ways to implement loops, since it uses syntax from many languages

• Quick syntax—NOTE: the LABEL: is optional.

• LABEL: while (T/F) block• LABEL: do block while T/F;• LABEL: until (T/F) block• LABEL: do block until T/F;• LABEL: for (EXPR; T/F; EXPR) block• LABEL: foreach variable (LIST) block

o NOTE: variable is also optional

• LABEL: for variable (LIST) blocko NOTE: variable is also optional

Page 31: Perl

while and for loops while( T/F) { statement; statement; … etc}

• Example:i= 1;while (i< 5) { i++;}ORi =1;do { i++;} while i<5;

for (expr;T/F;expr) { statements;}

• Example

for(i=1; i<5; i++) { i++;}• NOTE: the expr and T/F are

optional– Why? loop control, later.

for(;;) {++i;

}• legal loop, but infinite loop.

Page 32: Perl

until loop

• Like the while loop, except it exits when the condition is true.

Example:i=1;until (i>=5) { i++;}

ORi=1;do { i++;} until i>=5;

Page 33: Perl

Exercise 2

• Grade script• Write a perl script that reads numbers

between 0 and 100. It will stop reading when you enter a sentinel value of -1.

• It will print out the number and grade—90-100 A, 80-89 B, 70-79 C, 60-69 D, 0-59 F

• You need to write a loop and at least one if statement

Page 34: Perl

for and foreach with lists

• with lists, for and foreach have the same syntax—common practice is to use foreach, to

minimize the confusion with the other for loop syntax

foreach $num (1,2,3,4,5,6,7,8,9) { statement;}foreach $name ("jim", "steve", "allyson",

"matt") {print "$name \n";

}

Page 35: Perl

for and foreach with lists(2)

• Range values the .. tells perl to use a range of number—Only ascending order 1 to 10, but not 10 to 1.

foreach $num (1 .. 10) {statement;

}• OR evenforeach $num( 1,2,4 .. 8,10) {

statement;}• The true power of the foreach statement found

when using arrays.—So we'll get back to the foreach statement later.

Page 36: Perl

for and foreach with lists(3)

• ranges with stringsforeach $letter ("a" .. "z") {

#whatever you might want to do

}foreach $letter ("aa" .. "zz") {

statements;}• $letter is aa, ab, ac, ad, … zx, zy, zz• "0" .. "z", produces 0 to 9• "a" .. "9", produces a through z

Page 37: Perl

Loop control

• Perl provides the following statements for loop control—last LABEL

– exit the loop immediately

—next LABEL– skip rest of loop, and start the "next" cycle of the

loop.

—redo LABEL– restarts at the top of loop without evaluating

condition

—LABEL is optional, without LABEL command refers to inner most loop.

Page 38: Perl

loop control examplesfor(i=0; i<10; i++) { if (i== 9) { ++i;

redo;• loop will execute with 10 and stop at

11 based on the for statement expr. the i++ will not happen, because of the redo.

}

next if i== 4;— start as if we are at the

end of the loop

last if i== 10;— exit loop

}

for(i=0;;i++) { if (i== 9) { ++i;

redo;• loop will execute with 10

}

next if i== 4;— start as if we are at the end of

the loop

last if i== 10;— exit loop

}

• same as on the left

Page 39: Perl

labels and loop control

• With labels you can control nested loops• Example:OUTER: foreach $num (1..10) { INNER: for ($i=1; $i <10; $i++) {

next OUTER if ($i==4) && ($num ==2);next INNER if $i==2;print "$i times $num = ", $i*$num,"\n";

}}• So when i is 2, no output and when i is 4 and

num is 2 it will skip the rest of the INNER loop.

Page 40: Perl

Bare blocks and looping.

• a LABEL can be included around a bare block and using loop control, we can create a loop

• Example:

LOOP: {if ($x > 5) {

$x--;next LOOP;

}$z = $x + $y;

}

Page 41: Perl

case/switch statement

• Perl does not have a native case/switch statement, but it can be created using bare blocks and loop control.

• example:SWITCH: {

if ($x == 1) { statements; last SWITCH;}if ($x >3) { statements; last SWITCH; }if ($x > 10) {statements; last SWITCH;}statements; # the default or else part

}• Really a series of if statements.

Page 42: Perl

loops with the goto statement

• The horror: a goto statement• uses a LABEL• example:$i=0;TOP: goto END if $i >10;i++;goto TOP;END: print "using a goto statement\n";

Page 43: Perl

Pragmas• You tell perl to be a little more helpful

—Such as warnings, forcing declarations of variables or even use integer functions.

• forcing variables declarations, normally found at the top of the program

use strict;• show warningsuse warning;• use integer functions instead of realuse integer;• To turn it off:no strict; no warning; no integer;• These are only the common ones, there are

dozens more.

Page 44: Perl

Switch statement There is a perl module for a switch

statement. use Switch; //needed before the first use

of the switch statementswitch ($variable) {

case expr/regex { block }case [Number .. Number] {block}statements; #default if no case is taken.

}

Page 45: Perl

Switch statement (2) Example:use Switch;switch($val) {

case /[a-z]/i {print “a letter\n”;}case [2..9,11] {print “2 through 9\n”;}case 1 {print “number 1\n”;}case 10 {print “number 10\n”;}print “must be something else\n”;

}

Page 46: Perl

Switch statement (3) Switch and next command. The next

command allows perl to try the cases as well. The reverse of c/c++ were you need a break statement to stop this behavior. Also last works as well.

Switch ($val) {case 1 {print “number one\n”; next;}case [1..9] {print “it's a digit\n”; last if $val < 5; next;}case /\d{2,}/ {print “it at least a 2 digit\n”;}print “not a number!\n”;

}

Page 47: Perl

Switch statement (4) Using c/c++ behavior for the switchuse Switch 'fallthough'; Now fallthrough is default and last will stop it.Switch ($val) {

case 1 {print “number one\n”;}

case [1..9] {print “it's a digit\n”; last if $val < 5;}

case /\d{2,}/ {print “it at least a 2 digit\n”; last;}

print “not a number!\n”;

}

Page 48: Perl

QA&