Download presentation
Presentation is loading. Please wait.
Published byNeil Stewart Modified over 8 years ago
1
96-Summer 生物資訊程式設計實習 ( 二 ) Bioinformatics with Perl 8/13~8/22 蘇中才 8/24~8/29 張天豪 8/31 曾宇鳯
2
Schedule DateTimeSubjectSpeak er 8/13 一 13:30~17:30Perl Basics 蘇中才 8/15 三 13:30~17:30Programming Basics 蘇中才 8/17 五 13:30~17:30Regular expression 蘇中才 8/20 一 13:30~17:30Retrieving Data from Protein Sequence Database 蘇中才 8/22 三 13:30~17:30Perl combines with Genbank, BLAST 蘇中才 8/24 五 13:30~17:30PDB database and structure files 張天豪 8/27 一 8:30~12:30Extracting ATOM information 張天豪 8/27 一 13:30~17:30Mapping of Protein Sequence IDs and Structure IDs 張天豪 8/31 五 13:30~17:30Final and Examination 曾宇鳳
3
Programming Basic Subroutine
4
#!/usr/bin/perl -w # hello1.pl : say hello sub hello { print "Hello\n"; } &hello; &hello();
5
Quiz – the identical function name ? #!/usr/bin/perl -w sub hello { print "Hello\n"; } sub hello { print "HELLO\n"; } &hello;
6
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();
7
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” );
8
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;
9
Quiz – what is $ret ? #!/usr/bin/perl -w sub hello { print "Hello\n"; } my $ret = &hello; print “\$ret = $ret\n”;
10
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";
11
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; }
12
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 }
13
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;
14
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";
15
Programming Basic Control statement
16
if unless ?: while until for foreach
17
Control statement - if #!/usr/bin/perl -w # if1.pl : if statement my $proteinA = 300; #protein volume my $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 }
18
Control statement - if #!/usr/bin/perl -w # if2.pl : if statement my $proteinA = 300; #protein volume my $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 {... }
19
Control statement - if #!/usr/bin/perl -w # if3.pl : if statement my $proteinA = 300; #protein volume my $proteinB = 200; print "A is the same as B\n" if ($proteinA == $proteinB);... if (true);
20
Control statement - unless #!/usr/bin/perl -w # unless.pl : unless statement my $proteinA = 300; #protein volume my $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 }
21
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";
22
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";
23
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";
24
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";
25
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";
26
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";
27
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); }
28
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"; }
29
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++; }
30
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++; }
31
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"; }
32
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"; }
33
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"; }
34
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"; }
35
Exercise Control statement
36
Exercise 1+2+…+1000 = ? Using “while” Using “until” Using “for” Using “foreach”
37
Programming Basic Logical operator
38
and : && or : || not : ! Examples while (($a > 10) && ($a % 2 == 0)) { …} If (($a > 10) || ($a % 2 == 0)) { … } If (! defined($a)) { … }
39
Logical operator – and/or/not #!/usr/bin/perl -w # logical.pl : if statement my $proteinA = 300; #protein volume my $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"; }
40
Programming Basic INPUT/OUTPUT
41
Standard Input/Output Input STDIN OUTPUT STDOUT ERROR STDERR Don’t need to open or close it
42
Standard Input - #! /usr/bin/perl -w # getlines1.pl : like the Unix-command 'cat' while ( $line = ) { print $line; }./getline1.pl < logical.pl cat logical.pl |./getlines1.pl -
43
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
44
$_ #! /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
45
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.pl Or./getline4.pl *.pl
46
Standard Input/Output #!/usr/bin/perl -w # stdin.pl : read information from STDIN, and output them into STDOUT and STDERR while ($line = ) { if ($line eq "ERROR\n") { print STDERR “STDERR:$line"; } elsif ($line eq "QUIT\n") { last; } else { print STDOUT “STDOUT:$line"; }
47
Standard Input/Output #!/usr/bin/perl -w # chomp.pl : read information from STDIN, and output them into STDOUT and STDERR while ($line = ) { chomp($line); if ($line eq "ERROR") { print STDERR "$line\n"; } elsif ($line eq "QUIT") { last; } else { print STDOUT "$line\n"; }
48
parameters of printf specifierOutputExample c Character a d 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.65 g Use the shorter of %e or %f 392.65 G Use the shorter of %E or %f 392.65 o Signed octal 610 s String of characters sample u Unsigned decimal integer 7235 x Unsigned hexadecimal integer 7fa X Unsigned hexadecimal integer (capital letters) 7FA p Pointer address B800:0000 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.
49
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);
50
printf - output 1 1.2 32000000000 65 ABC 1 1.200000 3.200000e+10 A ABC [ 1] [ 1.20] [ 3.20e+10] [ A] [ ABC]
51
Exercise Control statement
52
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);
53
An example for CGI : env.pl #!/usr/bin/perl print "Content-type: text/html\n\n"; print "\n"; foreach (keys %ENV) { print $_." ===> ".$ENV{$_}." \n"; } print "\n";
54
env.pl procedures mkdir ~/public_html cd ~/public_html mkdir cgi-bin cd cgi-bin cp. chmod +x ~/ Results http://gene.csie.ntu.edu.tw/~course1/cgi-bin/env.pl http://gene.csie.ntu.edu.tw/~course1/cgi-bin/env.pl
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.