1 perl syntax: control structures learning perl, schwartz

32
1 Perl Syntax: control structures Learning Perl, Schwartz

Upload: phyllis-flynn

Post on 04-Jan-2016

234 views

Category:

Documents


1 download

TRANSCRIPT

1

Perl Syntax: control structures

Learning Perl, Schwartz

2

FYI

http://www.nimblegen.com/

3

Outline

• Control structures– if, for, while, foreach

• File Handles and Streams

• Regular Expressions -- a start

4

Expression Evaluation for Control Structures

if (CONDITION) { ….. lines in this block will be executed }CONDITIONS evaluate as true:1) any string except "" and "0"2) Any number except 03) Any reference is true

All undefined values are false

5

Control Structures

Provides the capability to make decisions based on results

if( something is true)

do this

else

do something else

6

if Control Structureif (condition) { execute block }elsif (condition) { }elsif (condition) { } : :else { }

7

if Control Structureif ( $i > 60) { print "Length of line is ".length($line)." \n"; }

if ($sequence eq 'ATG') { $start_index = $x; $j =$j + 1; }else { print "Start codon not found."; }

Note that in C -- you can have a single line of execution following an "if"if(j > 60) printf ("print statement here \n",j);

8

Examples

if ($sequence eq 'ATG') { $start_index = $x; $j = $j + 1; }elsif ($sequence eq 'ATT') { $stop_location = $y; }else { print "Start/stop codons not found."; }

9

Block/Braces Conventionsif ($i == 5) { # this is how most of the world writes code

print "Hello world.\n";}else {

$x=0;}#######################################if ($i == 5) # this is an alternative sometimes used

{ # either way is purely a stylistic choiceprint "Hello world.\n";}

else {$x=0;}

10

Iterative/Looping Control Structures

while (condition) { #block is repeatedly ….block # executed as long as } # condition is TRUE

while ($count < 300) {$count++; # same as $count = $count + 1;$number = <STDIN>;

&calc_sales($number);}

11

Strange Example

#!/usr/bin/perl

## hellow world

#comments

$i = "ATG";

$j = "TTTG";

if($i == $k)

{

print "Prof braun was wrong\n";

}

12

for loop

for( initialization; condition; execute) {block

}

1) Initialization statement is executed, first, only once

2) CONDITION is evaluated, if true BLOCK is executed

3) EXECUTE is performed4) Go to 2)

13

for loop

for( initialization; expression; execute) {block

}

Equivalent to while loop

initialization;while (expression){ block

execute }

14

for loop examples (nearly identical to C structure)

for ($i=0; $i<4; $i = $i+1) { print "Counting $i \n";}print "Out of loop: $i \n";

Counting 0Counting 1Counting 2Counting 3Out of loop: 4

15

for loop examplesfor (my $i=0; $i<4; $i = $i+1) { print "Counting $i \n";}print "Out of loop: $i \n";

Counting 0Counting 1Counting 2Counting 3Out of loop: for( ; $i<10 ; ) { # expressions are optional – none == infinite loop }

16

foreach

Really no equivalent in C.

foreach SCALAR ( ARRAY) { }

@nts = (A,T,C);foreach $nucleotide (@nts) { print $nucleotide ."\n";}

ATC

17

Side Notes

auto increment/decrement$i++; #same as $i = $i +1$i--;

chomp(STRING) and chop(STRING)chomp removes only 1 newline at end of

string or variable (if one exists)chop removes last character of string

18

STDIN, STDOUT, Filehandles

STDIN -- input "stream" (ex. keyboard -- are there others?)

STDOUT -- output "stream" (ex. screen)

Filehandles -- similar to streams -- input from, and output to files

19

More Side Noteschomp ($text = <STDIN>);

$text = <STDIN>;chomp($text); #

defined EXPR ; # returns a boolean value saying whether EXPR has a real value or not -- scalar with non-zero string or numeric

$text = "hello";if (defined($text)) {

: }

May be used to determine if subroutines or filehandle exists.

20

Filehandles

• name for a file, device, socket, or pipe• filehandle name is arbitrary (one of few

examples where $ is NOT used)

open(FILE, "filename");open(UP, "test"); # read from file "test"open(WRITE,">filename"); # write to file "filename"open(NOW, ">>test"); # append to a fileclose (FH);

21

Filehandles Examples

# STDOUT is default output – to screen# STDIN is default input – from keyboardprint STDOUT "Enter a number: ";$num = <STDIN>;print STDOUT "the number is $num\n";

open(BOB, "test");$line = <BOB>; #read one line from "test"open(NEW,">output");print NEW "$line"; #write $line to file "output"

22

Pipes and File redirection| -- pipe operator (Unix)

Example: File ("names") contains:

Tim

Tracy

Bob

cat names | sort > look

Output:

Bob

Tim

Tracy

cat names | sort | wc > look

> -- redirection operator

ls > look

Places files and directories into the file named “look”

23

Regular Expressions (regexp)• Regular Expression – template that matches a set of strings

– very useful for text processing and pattern matching• document and text processing – text editors, etc• formatted and unformatted data• genomic data (sequences, ESTs, genes, microarray, etc)

>gi|25952121|ref|NM_033028.2| Homo sapiens Bardet-Biedl syndrome 4 (BBS4), mRNAGACTTCCGGCCGCGCAGCGGTGGGCTGAGCTAAAATGGCTGAGGAGAGAGTCGCGACGAGAACTCAATTTCCTGTATCTACTGAGTCTCAAAAACCCCGGCAGAAAAAAGCTCCAGAGTTTCCTATTTTGG…

• default variable: $_– in many cases, Perl will automatically use $_ as the default variableExamples:$_ = "test\n";print; # prints $_ by default

foreach (1..5) { # no variable specified print "Count $_ \n";}

$_ will show up more in later lectures

24

Pattern Matching

To compare a pattern (regular expression):

$_ = "ATCGAGAGCATGCCATGCAT";if(/ATG/) { print "Found sequence\n";}

Remember naïve.pl

25

Regular Expressions

metacharacters

(.) period – matches any character except newline

(\) backslash – makes any metacharacter a non-metacharacter

Example: 3.145 would match 3b145

3\.145 would match 3.145

26

Regular Expressions

Quantifier metacharacters(*) asterisk – match preceding item 0 or more times

/ATGC*ATG/ matches ATGATG, ATGCATG,

ATGCCCCCCCCCCCCCCCCCCCCATG, etc.(+) plus – match preceding item 1 or more times(?) question mark – match preceding item 0 or 1 times

/ATGC?ATG/ only matches ATGCATG and ATGATG

27

General Quantifiers

/a{5,15}/ matches between 5, and 15 "a"matches if first 15, if more than 15

"a"/(fred){3,}/ matches 3 or more "fred" with no upper

limit – fredfredfred/(fred){3}/ matches exactly fredfredfred

* = {0,} zero or more+ = {1,} one or more? = {0,1} zero or one

#!/usr/bin/perl

#ping for 1 week

#every 5 minutes

#12 per hour = 2016 pings

$|=1; #output auto flush

$num_pings=2016;

$count = 0;

$date = `date /t`; # Wed 09/17/2008

chomp($date);

$date =~ s/(\w+)\s(\d+)\/(\d+)\/(\d+)(\s+)/$2$3$4/;

$file = ">>PingLog".$date.".txt";

print "file = $file\n";

while($count<$num_pings)

{

print "pinging\n";

open(PING,$file);

#$results = `ping 12.217.250.200`;

$results = `ping 128.255.22.207`;

#$results = system("ping 128.255.22.207");

print "results = $results\n";

$date = `date /t`;

$time = `time /t`;

$_ = $results;

if(m/Reply/)

{

print PING "Success: $date $time $results\n";

}

else {

print PING "FAIL: $date $time $results\n"; }

print PING "---------------------------------------\n";

close(PING);

$count++;

$ticks = 150; # 2 * 150 = 300 secs = 5 mins

while($ticks>0)

{

print "$count $ticks \r";

sleep(2);

$ticks--;

}

print "\n";

}

28

FAIL: Wed 04/30/2008

08:33 PM

Pinging 128.255.22.207 with 32 bytes of data:

Request timed out.

Request timed out.

Request timed out.

Request timed out.

Ping statistics for 128.255.22.207:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

---------------------------------------

Success: Wed 04/30/2008

08:38 PM

Pinging 128.255.22.207 with 32 bytes of data:

Reply from 128.255.22.207: bytes=32 time=22ms TTL=51

Reply from 128.255.22.207: bytes=32 time=21ms TTL=51

Reply from 128.255.22.207: bytes=32 time=23ms TTL=51

Reply from 128.255.22.207: bytes=32 time=21ms TTL=51

Ping statistics for 128.255.22.207:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 21ms, Maximum = 23ms, Average = 21ms

---------------------------------------

29

ping 128.255.22.1

What the output of "ping" should look like:

Pinging 128.255.22.1 with 32 bytes of data:

Reply from 128.255.22.1: bytes=32 time=24ms TTL=52

Reply from 128.255.22.1: bytes=32 time=24ms TTL=52

Reply from 128.255.22.1: bytes=32 time=24ms TTL=52

Reply from 128.255.22.1: bytes=32 time=24ms TTL=52

Ping statistics for 128.255.22.1:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 22ms, Maximum = 25ms, Average = 23ms

30

Ping failure

Pinging 128.255.22.1 with 32 bytes of data:

Request timed out.

Request timed out.

Request timed out.

Request timed out.

Ping statistics for 128.255.22.1:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

31

32

END