96-summer 生物資訊程式設計實習 ( 二 )

54
96-Summer 生生生生生生生生生生 ( 生 ) Bioinformatics with Perl 8/13~8/22 生生生 8/24~8/29 生生生 8/31 生生生

Upload: freira

Post on 09-Jan-2016

45 views

Category:

Documents


5 download

DESCRIPTION

96-Summer 生物資訊程式設計實習 ( 二 ). Bioinformatics with Perl 8/13~8/22 蘇中才 8/24~8/29 張天豪 8/31 曾宇鳯. Schedule. Programming Basic. Subroutine. Subroutine. #!/usr/bin/perl -w # hello1.pl : say hello sub hello { print "Hello\n"; } &hello; &hello();. Quiz – the identical function name ?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 96-Summer 生物資訊程式設計實習 ( 二 )

96-Summer生物資訊程式設計實習(二 )

Bioinformatics with Perl

8/13~8/22 蘇中才8/24~8/29 張天豪

8/31 曾宇鳯

Page 2: 96-Summer 生物資訊程式設計實習 ( 二 )

ScheduleDate Time Subject Spea

ker

8/13 一

13:30~17:30 Perl Basics 蘇中才

8/15 三

13:30~17:30 Programming Basics 蘇中才

8/17 五

13:30~17:30 Regular expression 蘇中才

8/20 一

13:30~17:30 Retrieving Data from Protein Sequence Database

蘇中才

8/22 三

13:30~17:30 Perl combines with Genbank, BLAST 蘇中才

8/24 五

13:30~17:30 PDB database and structure files 張天豪

8/27 一

8:30~12:30 Extracting ATOM information 張天豪

8/27 一

13:30~17:30 Mapping of Protein Sequence IDs and Structure IDs

張天豪

8/31五 13:30~17:30 Final and Examination 曾宇鳳

Page 3: 96-Summer 生物資訊程式設計實習 ( 二 )

Programming Basic

Subroutine

Page 4: 96-Summer 生物資訊程式設計實習 ( 二 )

Subroutine

#!/usr/bin/perl -w

# hello1.pl : say hello

sub hello { print "Hello\n";}

&hello;&hello();

Page 5: 96-Summer 生物資訊程式設計實習 ( 二 )

Quiz – the identical function name ?#!/usr/bin/perl -w

sub hello { print "Hello\n";}

sub hello { print "HELLO\n";}

&hello;

Page 6: 96-Summer 生物資訊程式設計實習 ( 二 )

Subroutine – with a counter#!/usr/bin/perl -w

# hello2.pl : say hello with a counter

my $counter=0;

sub hello { $counter++; print "Hello ($counter)\n";}

&hello;&hello();

Page 7: 96-Summer 生物資訊程式設計實習 ( 二 )

Subroutine - parameters#!/usr/bin/perl -w

# hello3.pl : say hello to someone with a counter

my $counter=0;

sub hello { my $name = $_[0]; #all arguments are stored in @_ $counter++; print "Hello,$name ($counter)\n";}

&hello( 'Wang’ );&hello( "Kuo” );&hello( "Tsao” );

Page 8: 96-Summer 生物資訊程式設計實習 ( 二 )

Subroutine – value return#!/usr/bin/perl -w

# hello4.pl : value return

my $counter=0;

sub hello { my $name = $_[0]; # all parameters are stored in @_ $counter++; return "Hello,$name ($counter)\n";}

my $ret = &hello('Wang'); print "$ret";$ret = &hello("Kuo"); print $ret;$ret = &hello("Tsao"); print $ret;

Page 9: 96-Summer 生物資訊程式設計實習 ( 二 )

Quiz – what is $ret ?

#!/usr/bin/perl -w

sub hello { print "Hello\n";}

my $ret = &hello; print “\$ret = $ret\n”;

Page 10: 96-Summer 生物資訊程式設計實習 ( 二 )

Variable – global/local#!/usr/bin/perl -w

# variable.pl : global/local variable

my $a = 0;sub max { my ($a, $b); ($a, $b) = @_; print "\$a in &max = $a\n"; if ($a > $b) { $a; } else { $b; }}print "\$a before calling &max = $a\n";$a = &max(3,5);print "\$a after calling &max = $a\n";

Page 11: 96-Summer 生物資訊程式設計實習 ( 二 )

Maximum#!/usr/bin/perl -w

# max.pl : get the largest number among a list of numbers

my $maximum = &max(1, 10, 5, 7, 4);print "the largest number is $maximum\n";

sub max { my $max_number = shift @_; while ($number = shift @_) { if ($number > $max_number) { $max_number = $number; } } $max_number;}

Page 12: 96-Summer 生物資訊程式設計實習 ( 二 )

Return#!/usr/bin/perl# return.pl : use 'return' to stop the subroutine and assign the return value

my @names = qw / Wang Kuo Tsao Keng Lo Huang/;my $result = &which_one_is("Tsao", @names);if ($result eq -1) { print "Tsao isn't a pitcher\n";} else { $result++; print "Tsao is the $result-th pitcher\n";}sub which_one_is { my ($name, @list) = @_; foreach $idx (0..$#list) { if ($name eq $list[$idx]) { return $idx; } } -1; # $name can't be found among @list}

Page 13: 96-Summer 生物資訊程式設計實習 ( 二 )

declaration of variable#!/usr/bin/perl -w$counter = 1;sub hello { print "$counter\n";}sub a { local $counter = 2; &hello;}sub b { my $counter = 3; &hello;}sub c { $counter = 4; &hello;}

&hello;&a;&hello;&b;&hello;&c;&hello;

Page 14: 96-Summer 生物資訊程式設計實習 ( 二 )

strict

#!/usr/bin/perl -w

# strict.pl : use strict to enhance the error checking power of compiler

use strict;

$taipei101 = 509.2;

print "Taipei 101 has $taipei1O1 meter\n";

Page 15: 96-Summer 生物資訊程式設計實習 ( 二 )

Programming Basic

Control statement

Page 16: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement

if unless ?: while until for foreach

Page 17: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - if#!/usr/bin/perl -w

# if1.pl : if statement

my $proteinA = 300; #protein volumemy $proteinB = 200;

if ($proteinA == $proteinB) { print "Protein A is the same as Protein B\n";} else { print "Protein A isn't the same as Protein B\n";}

if (true) { # true } else { # false}

Page 18: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - if#!/usr/bin/perl -w

# if2.pl : if statement

my $proteinA = 300; #protein volumemy $proteinB = 200;

if ($proteinA > $proteinB) { print "Protein A is larger than Protein B\n";} elsif ($proteinA < $proteinB) { print "Protein A is smaller than Protein B\n";} else { print "Protein A is the same as Protein B\n";}

if (...) { ... } elsif (...) { ...} else { ...}

Page 19: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - if

#!/usr/bin/perl -w

# if3.pl : if statement

my $proteinA = 300; #protein volumemy $proteinB = 200;

print "A is the same as B\n" if ($proteinA == $proteinB);

... if (true);

Page 20: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - unless#!/usr/bin/perl -w

# unless.pl : unless statement

my $proteinA = 300; #protein volumemy $proteinB = 200;

unless ($proteinA == $proteinB) { print "Protein A isn't the same as Protein B\n";} else { print "Protein A is the same as Protein B\n";}

unless (true) { # false } else { # true}

Page 21: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - ?:#!/usr/bin/perl -w

# if4.pl : if statement

my $type = "DNA"; # "DNA" or "RNA"my $bp;

if ($type eq "DNA") { $bp = "ATCG";} else { $bp = "AUCG";}print "$type : $bp\n";$bp = ($type eq "DNA") ? "ATCG" : "AUCG";print "$type : $bp\n";

Page 22: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - while#!/usr/bin/perl -w

# while1.pl : count 1 to 10 with while statement

my $sum = 0;

my $current = 1;

while ($current <= 10) {

$sum = $sum + $current;

$current++;

}

print "The summary from 1 to 10 is $sum\n";

Page 23: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - while#!/usr/bin/perl -w

# while2.pl : count 1 to 10 with while statement

my $sum = 0;my $current = 1;do { $sum = $sum + $current; $current++;} while ($current <= 10);print "The summary from 1 to 10 is $sum\n";

Page 24: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - while#!/usr/bin/perl -w

# while3.pl : count 1 to 10 with while statement

my $sum = 0;my $current = 1;$sum = $sum + $current++ while ($current <= 10);

print "The summary from 1 to 10 is $sum\n";

Page 25: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - while#!/usr/bin/perl -w

# while4.pl : count 1 to 10 with while statement

my $sum = 0;my $current = 1;while ($current <= 10) { $sum = $sum + $current;} continue { $current++;}

print "The summary from 1 to 10 is $sum\n";

Page 26: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - until#!/usr/bin/perl -w

# until.pl : count 1 to 10 with until statement

my $sum = 0;

my $current = 1;

until ($current > 10) {

$sum = $sum + $current;

$current++;

}

print "The summary from 1 to 10 is $sum\n";

Page 27: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - for#!/usr/bin/perl -w

# for1.pl : count 1 to 10 with for statement

my $sum = 0;

for(my $current=1;$current<=10;$current++) {

$sum = $sum + $current;

}

print "The summary from 1 to 10 is $sum\n";

for ( initialise; test; increment ) { statement(s); }

Page 28: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - for#!/usr/bin/perl -w

# for2.pl : show each pitcher by for statement

my @names = qw / Wang Kuo Tsao Keng Lo Huang/;

for(my $idx=0;$idx<=$#names;$idx++) {

print "$idx : $names[$idx]\n";

}

Page 29: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - foreach#!/usr/bin/perl -w

# foreach.pl : show each pitcher by foreach statement

my @names = qw / Wang Kuo Tsao Keng Lo Huang/;

my $idx = 0;

foreach $name (@names) {

print "$idx : $name\n";

$idx++;

}

Page 30: 96-Summer 生物資訊程式設計實習 ( 二 )

Control statement - foreach#!/usr/bin/perl -w

# for3.pl : show each pitcher by foreach statement

my @names = qw / Wang Kuo Tsao Keng Lo Huang/;

my $idx = 0;

for $name (@names) {

print "$idx : $name\n";

$idx++;

}

Page 31: 96-Summer 生物資訊程式設計實習 ( 二 )

Infinite control statement#!/usr/bin/perl -w# infinite.pl : infinite loop, and Ctrl+C to stop it

for(;;) {

print "for\n";

}

while (1) {

print "while\n";

}

until (0) {

print "until\n";

}

Page 32: 96-Summer 生物資訊程式設計實習 ( 二 )

Loop control - last#!/usr/bin/perl -w

# last.pl : stop infinite loop by last

while(1) {

if ($counter++ >= 10) {

last;

}

print "while($counter)\n";

}

####################################

$counter=0;

while ($counter++ < 10) {

print "while($counter)\n";

}

Page 33: 96-Summer 生物資訊程式設計實習 ( 二 )

Loop control - next#!/usr/bin/perl -w

# next.pl : skip loop control by next

$counter=0;

while ($counter++ < 10) {

if ($counter == 5) {

next;

}

print "while($counter)\n";

}

Page 34: 96-Summer 生物資訊程式設計實習 ( 二 )

Loop control - redo#!/usr/bin/perl -w

# redo.pl : redo loop control by redo

$counter=0;

while ($counter++ < 10) {

if ($counter == 5) {

$counter++;

redo;

}

print "while($counter)\n";

}

Page 35: 96-Summer 生物資訊程式設計實習 ( 二 )

Exercise

Control statement

Page 36: 96-Summer 生物資訊程式設計實習 ( 二 )

Exercise

1+2+…+1000 = ?Using “while”

Using “until”

Using “for”

Using “foreach”

Page 37: 96-Summer 生物資訊程式設計實習 ( 二 )

Programming Basic

Logical operator

Page 38: 96-Summer 生物資訊程式設計實習 ( 二 )

Logical operator

and : && or : || not : ! Examples

while (($a > 10) && ($a % 2 == 0)) { …} If (($a > 10) || ($a % 2 == 0)) { … } If (! defined($a)) { … }

Page 39: 96-Summer 生物資訊程式設計實習 ( 二 )

Logical operator – and/or/not#!/usr/bin/perl -w

# logical.pl : if statement

my $proteinA = 300; #protein volumemy $proteinB = 300;my $proteinC;

if (($proteinA > 200)&&($proteinA eq $proteinB)) { print "Protein A is larger than 200 and the same as Protein B\n";}if (($proteinA > 400)||($proteinA eq $proteinB)) { print "Protein A is larger than 400 or the same as Protein B\n";}if (! defined($proteinC)) { print "Protein C isn't declared\n";}

Page 40: 96-Summer 生物資訊程式設計實習 ( 二 )

Programming Basic

INPUT/OUTPUT

Page 41: 96-Summer 生物資訊程式設計實習 ( 二 )

Standard Input/Output Input

STDIN OUTPUT

STDOUT ERROR

STDERR

Don’t need to open or close it

Page 42: 96-Summer 生物資訊程式設計實習 ( 二 )

Standard Input - <STDIN>

#! /usr/bin/perl -w

# getlines1.pl : like the Unix-command 'cat'

while ( $line = <STDIN> ){ print $line;}

./getline1.pl < logical.plcat logical.pl | ./getlines1.pl -

Page 43: 96-Summer 生物資訊程式設計實習 ( 二 )

Diamond - <>

#! /usr/bin/perl -w

# getlines2.pl : like the Unix-command 'cat'

while ( $line = <> ){ print $line;}

./getline2.pl logical.pl or

./getline2.pl < logical.pl

Page 44: 96-Summer 生物資訊程式設計實習 ( 二 )

$_#! /usr/bin/perl -w

# getlines3.pl : like the Unix-command 'cat'

while ( <> ){ print $_;}

./getline3.pl logical.pl while.pl redo.pl or

./getline3.pl *.pl

Page 45: 96-Summer 生物資訊程式設計實習 ( 二 )

Invocation argument - @ARGV#! /usr/bin/perl -w

# getlines4.pl : like the Unix-command 'cat'

foreach (@ARGV) { print "[$_]\n";}while ( <> ) { print $_;}

./getline4.pl logical.pl while.pl redo.plOr ./getline4.pl *.pl

Page 46: 96-Summer 生物資訊程式設計實習 ( 二 )

Standard Input/Output#!/usr/bin/perl -w

# stdin.pl : read information from STDIN, and output them into STDOUT and STDERR

while ($line = <STDIN> ) { if ($line eq "ERROR\n") { print STDERR “STDERR:$line"; } elsif ($line eq "QUIT\n") { last; } else { print STDOUT “STDOUT:$line"; }}

Page 47: 96-Summer 生物資訊程式設計實習 ( 二 )

Standard Input/Output#!/usr/bin/perl -w

# chomp.pl : read information from STDIN, and output them into STDOUT and STDERR

while ($line = <STDIN>) { chomp($line); if ($line eq "ERROR") { print STDERR "$line\n"; } elsif ($line eq "QUIT") { last; } else { print STDOUT "$line\n"; }}

Page 48: 96-Summer 生物資訊程式設計實習 ( 二 )

parameters of printf

specifier Output Example

c Character ad or i Signed decimal integer 392

e Scientific notation (mantise/exponent) using e character 3.9265e+2

E Scientific notation (mantise/exponent) using E character 3.9265E+2

f Decimal floating point 392.65g Use the shorter of %e or %f 392.65G Use the shorter of %E or %f 392.65o Signed octal 610s String of characters sampleu Unsigned decimal integer 7235x Unsigned hexadecimal integer 7faX Unsigned hexadecimal integer (capital letters) 7FA

p Pointer addressB800:000

0

n Nothing printed. The argument must be a pointer to a signed int, where the number of characters written so far is stored.

% A % followed by another % character will write % to stdout.

Page 49: 96-Summer 生物資訊程式設計實習 ( 二 )

printf#! /usr/bin/perl -w

# printf.pl : user-defined type for variable output

my $var1 = 1;my $var2 = 1.2;my $var3 = 3.2E10;my $var4 = 65;my $var5 = 'ABC';print ("$var1 $var2 $var3 $var4 $var5\n");printf("%d %f %e %c %s\n",$var1, $var2, $var3, $var4,

$var5);printf("[%5d] [%5.2f] [%10.2e] [%5c] [%5s]\n",$var1,

$var2, $var3, $var4, $var5);printf("[%-5d] [%-5.2f] [%-10.2e] [%-5c] [%-5s]\n",$

var1, $var2, $var3, $var4, $var5);

Page 50: 96-Summer 生物資訊程式設計實習 ( 二 )

printf - output

1 1.2 32000000000 65 ABC

1 1.200000 3.200000e+10 A ABC

[ 1] [ 1.20] [ 3.20e+10] [ A] [ ABC]

[1 ] [1.20 ] [3.20e+10 ] [A ] [ABC ]

Page 51: 96-Summer 生物資訊程式設計實習 ( 二 )

Exercise

Control statement

Page 52: 96-Summer 生物資訊程式設計實習 ( 二 )

Exercise#! /usr/bin/perl -w

# printf.pl : user-defined type for variable output

my $var1 = 1;my $var2 = 1.2;my $var3 = 3.2E10;my $var4 = 65;my $var5 = 'ABC';

printf("%s %s %s %s %s\n",$var1, $var2, $var3, $var4, $var5);

printf("%f %f %f %f %f\n",$var1, $var2, $var3, $var4, $var5);

Page 53: 96-Summer 生物資訊程式設計實習 ( 二 )

An example for CGI : env.pl

#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "\n";

foreach (keys %ENV) { print $_." ===> ".$ENV{$_}."<br>\n";}

print "\n";

Page 54: 96-Summer 生物資訊程式設計實習 ( 二 )

env.pl

proceduresmkdir ~/public_htmlcd ~/public_htmlmkdir cgi-bincd cgi-bincp <your env.pl> .chmod +x ~/

Resultshttp://gene.csie.ntu.edu.tw/~course1/cgi-bin/env.pl