Difference between revisions of "Perl example code"
From irefindex
Line 419: | Line 419: | ||
</pre> | </pre> | ||
+ | |||
+ | Excercise14.plx | ||
<pre> | <pre> | ||
+ | #!/usr/bin/perl | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | |||
+ | |||
+ | #Open a web browser | ||
+ | #Go to http://search.cpan.org/ | ||
+ | #Type in “bioperl Tools BLAST” | ||
+ | #Follow the link to Bio::Tools::Blast | ||
+ | #Browse through this page and the example code | ||
+ | |||
+ | |||
+ | |||
+ | #bioperl example code | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | |||
+ | #make the bioperl module (class) accessible to your program | ||
+ | use Bio::Tools::BLAST; | ||
+ | |||
+ | print"ok - ready to use Bio::Tools::BLAST"; | ||
+ | </pre> | ||
+ | |||
+ | Excercise 15 - install BioPerl | ||
+ | <pre> | ||
+ | Install bioperl | ||
+ | 1. At the command line prompt type | ||
+ | |||
+ | ppm� | ||
+ | |||
+ | |||
+ | 2. Then at the ppm prompt type��ppm> search bioperl�� | ||
+ | |||
+ | 3. Then type��ppm> install bioperl | ||
+ | |||
+ | Try this exercise at home. Installing libraries is not possible at UiO computers. | ||
+ | </pre> | ||
+ | |||
+ | Excercise16.plx | ||
+ | |||
+ | <pre> | ||
+ | #! /usr/local/bin/perl | ||
+ | # Create and run a program which creates a Seq object and manipulates it: | ||
+ | |||
+ | use Bio::Seq; | ||
+ | |||
+ | # initiation of Seq object | ||
+ | $seq = Bio::Seq->new('-seq' =>'CGGCGTCTGGAACTCTATTTTAAGAACCTCTCAAAACGAAACAAGC', | ||
+ | '-desc' => 'An example', | ||
+ | '-display_id' => 'NM_005476', | ||
+ | '-accession_number' => '6382074', | ||
+ | '-moltype' => 'dna'); | ||
+ | |||
+ | # sequence manipulations | ||
+ | $aa = $seq -> moltype(); # one of 'dna','rna','protein' | ||
+ | $ab = $seq -> subseq(5,10); # part of the sequence as string | ||
+ | |||
+ | $ac = $seq -> revcom; # returns an object of the reverse complemented sequence | ||
+ | $ac1 = $ac -> seq(); | ||
+ | |||
+ | $ad = $seq -> translate; # returns an object of the sequence translation | ||
+ | $ad1 = $ad -> seq(); | ||
+ | |||
+ | $ae = $seq -> translate(undef,undef,1); # returns an object of the sequence translation (using frame 1) (0,1,2 can be used)? | ||
+ | $ae1 = $ae -> seq(); | ||
+ | |||
+ | print "Molecule Type: $aa\n"; | ||
+ | print "Sequence from 5 to 10: $ab\n"; | ||
+ | print "Reverse complemented sequence: $ac1\n"; | ||
+ | print "Translated sequence: $ad1\n"; | ||
+ | print "Translated sequence (using frame 1): $ae1\n"; | ||
+ | </pre> | ||
+ | |||
+ | Excercise17.plx | ||
+ | |||
+ | <pre> | ||
+ | |||
+ | Check out the code of several examples | ||
+ | using BioPerl at: | ||
+ | |||
+ | |||
+ | http://bip.weizmann.ac.il/course/prog2/perlBioinfo/ | ||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | Another answer to excercise 12 | ||
+ | |||
+ | <pre> | ||
+ | #!/usr/bin/perl | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | |||
+ | #TASK: demonstrate the use of “my” in setting the | ||
+ | #scope of a variable | ||
+ | my $some_variable = 100; | ||
+ | |||
+ | #body of the main program with the function call | ||
+ | print "the value of some_variable is: $some_variable\n"; | ||
+ | subroutine1(); | ||
+ | print "but here, some_variable is still: $some_variable\n"; | ||
+ | |||
+ | #subroutine using $some_variable | ||
+ | sub subroutine1{ | ||
+ | my $some_variable = 0; | ||
+ | print "in subroutine1,some_variable is: $some_variable\n"; | ||
+ | } | ||
+ | |||
+ | |||
+ | #what happens if you comment out "use strict" and | ||
+ | #remove "my" from lines 7 and 16 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Another answer to excercise 13 | ||
+ | |||
+ | <pre> | ||
+ | #!/usr/bin/perl | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | |||
+ | #TASK: check your answers to the regex excercise | ||
+ | |||
+ | #open input and output files | ||
+ | open(IN,"myanswers.txt"); | ||
+ | |||
+ | |||
+ | #read the input file line-by-line | ||
+ | #for each line test if it matches a regular expression | ||
+ | while(<IN>){ | ||
+ | chomp; | ||
+ | my $is_correct = does_it_match($_); | ||
+ | if ($is_correct){ | ||
+ | print "$_ is a match\n"; | ||
+ | } | ||
+ | else{ | ||
+ | print "$_ is NOT a match\n"; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | #close input file and exit | ||
+ | close(IN); | ||
+ | exit(); | ||
+ | |||
+ | |||
+ | #does it match | ||
+ | sub does_it_match{ | ||
+ | my($answer) = @_; | ||
+ | my $is_correct = 0; | ||
+ | if ($answer =~ m/^ATG?C*[ATCG]+?A{3,10}$/){ | ||
+ | $is_correct = 1; | ||
+ | } | ||
+ | return $is_correct; | ||
+ | } | ||
+ | |||
</pre> | </pre> |
Revision as of 21:58, 26 May 2011
These are code examples that accompany the MBV3070 Perl lectures.
Copy and paste the text to a text file called Excercise1.plx And then, in the command prompt, type
perl Excercise1.plx
to run the example script.
Excercise1.plx
#!/usr/bin/perl use strict; use warnings; print "My first Perl program\n"; #try single quotes print "First line\nsecond line and there is a tab\there\n";
Excercise2.plx
#!/usr/bin/perl use strict; use warnings; #assign values to variables $x and $y and print them out my $x = 4; my $y = 2; print "x is $x and y is $y\n"; #example of arithmetic expression my $z = $x + $y**3; $x++; print "x is $x and z is $z\n"; #evaluating arithmetic expression within print command print "add 3 to $z: $z + 3\n"; #did it work? print "add 3 to $z:", $z + 3,"\n";
Excercise3.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Concatenate two given sequences, #find the length of the new sequence and #print out the second codon of the sequence #assign strings to variables my $DNA = "GATTACACAT"; my $polyA = "AAAA"; #concatenate two strings my $modifiedDNA = $DNA.$polyA; #calculate the length of $modifiedDNA and #print out the value of the variable and its length my $DNAlength = length($modifiedDNA); print "Modified DNA: $modifiedDNA has length $DNAlength\n"; #extract the second codon in $modifiedDNA my $codon = substr($modifiedDNA,3,3); print "Second codon is $codon\n";
Excercise4.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Ask the user for her name and age #and calculate her age in days #get a string from the keyboard print "Please enter your name\n"; my $name = <STDIN>; #getting rid of the new line character #try leaving this line out chomp($name); #prompt the user for his/her age #get a number from the keyboard print "$name please enter your age\n"; my $age = <>; chomp($age); #calculate age in days my $age_in_days = $age*365; print "You are $age_in_days days old\n";
Excercise5.plx
#!/usr/bin/perl use strict; use warnings; #initialize an array my @bases = ("A","C","G","T"); #print two elements of the array print $bases[0],$bases[2],"\n"; #print the whole array print @bases,"\n"; #try with double quotes #print the number of elements in the array print scalar(@bases),"\n";
Excercise6.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Count the frequency of base G #in a given DNA sequence my $DNA = "GATTACACAT"; #initialize $countG and $currentPos my $countG = 0; my $currentPos = 0; #calculate the length of $DNA my $DNAlength = length($DNA); #for each letter in the sequence check if it is the base G #if 'yes' increment $countG while($currentPos < $DNAlength){ my $base = substr($DNA,$currentPos,1); if($base eq "G"){ $countG++; } $currentPos++; } #end of while loop #print out the number of Gs print "There are $countG G bases\n";
Excercise7.plx
#!/usr/bin/perl use strict; use warnings; my @array; #initialize a 20-element array with numbers 0,...19 for(my $i=0;$i<20;$i++){ $array[$i] = $i; } #print elements one-by-one using foreach foreach my $element (@array){ print "$element\n"; }
Excercise8.plx
#!/usr/bin/perl use strict; use warnings; #TASK: For a given DNA sequence find its RNA transcript, #find its reverse complement and check if #the reverse complement contains a start codon my $DNA = "GATTACACAT"; #transcribe DNA to RNA - T changes to U my $RNA = $DNA; $RNA =~ s/T/U/g; print "RNA sequence is $RNA\n"; #find the reverse complement of $DNA using substitution operator #first - reverse the sequence my $rcDNA = reverse($DNA); $rcDNA =~ s/T/A/g; $rcDNA =~ s/A/T/g; $rcDNA =~ s/G/C/g; $rcDNA =~ s/C/G/g; print "Reverse complement of $DNA is $rcDNA\n"; #did it work? #find the reverse complement of $DNA using translation operator #first - reverse the sequence $rcDNA = reverse($DNA); #then - complement the sequence $rcDNA =~ tr/ACGT/TGCA/; #then - print the reverse complement print "Reverse complement of $DNA is $rcDNA\n"; #look for a start codon in the reverse sequence if($rcDNA =~ /ATG/){ print "Start codon found\n"; } else{ print "Start codon not found\n"; }
Excercise9.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Make a subroutine that calculates #the reverse #complement of a DNA sequence and call it #from the main program #body of the main program with the function call my $DNA = "GATTACACAT"; my $rcDNA = revcomp($DNA); print "$rcDNA\n"; exit; #definition of the function for reverse complement sub revcomp{ my($DNAin) = @_; my $DNAout = reverse($DNAin); $DNAout =~ tr/ACGT/TGCA/; return $DNAout; }
Excercise10.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Read DNA sequences from ‘DNAseq’ input file – #there is one sequence per line #For each sequence find the reverse complement and #print it to ‘DNAseqRC’ output file #open input and output files open(IN,"DNAseq.txt"); open(OUT,">DNAseqRC.txt"); #read the input file line-by-line #for each line find the reverse complement #print it in the output file while(<IN>){ chomp; my $rcDNA = revcomp($_); print OUT "$rcDNA\n"; } #close input and output files close(IN); close(OUT); exit(); #definition of the function for reverse complement sub revcomp{ my($DNAin) = @_; my $DNAout = reverse($DNAin); $DNAout =~ tr/ACGT/TGCA/; return $DNAout; }
DNAseq.txt
ACGACTAGCATCAGCAT AAAAATGATCGACTATATAGCATA AAAGGTGCATCAGCATGG
Excercise11.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Print a list of all Perl programs we did so far. #These files can be found in your current directory and #they start with the word ‘program’ print "List of programs we made today:\n"; #system call for 'ls' function - the result goes into a string my $listing = `dir`; #these are back quotes #split the string to get individual files my @files = split(/\n/,$listing); #use foreach to step through the array #if a file contains word 'program' print it out foreach my $file (@files){ if($file =~ /excercise/){ print "$file\n"; } }
Excercise12.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Write a program that has one function. #Use a variable named “$some_variable” in this #function and in the main body of the program. #Prove that you can alter the value of #$some_variable in the function without #changing the value of $some_variable in the #the main body of the program #declare variables used in the main routine my $some_variable; my $some_variable_changed_by_subroutine; #main routine $some_variable = 10; print "i am in the main routine and some_variable is: $some_variable\n"; $some_variable_changed_by_subroutine = subroutine($some_variable); print "i am in the main routine some_variable is now: $some_variable\n"; print "i am in the main routine some_variable_changed_by_subroutine is: $some_variable_changed_by_subroutine\n"; #a subroutine that uses a variable with the same name as a variable in the main routine sub subroutine{ my $some_variable; $some_variable = $_[0]; print "i am in the subroutine and some_variable is: $some_variable\n"; ++$some_variable; print "i am in the subroutine and some_variable is now: $some_variable\n"; return $some_variable }
Excercise13.plx
#!/usr/bin/perl use strict; use warnings; #TASK: Read lines from input file – #print lines that match a regular expression #open input and output files open(IN,"excercise13input.txt"); open(OUT,">excercise13output.txt"); #read the input file line-by-line #for each line ask if it matches the regex #print it in the output file while(<IN>){ chomp; if ($_ =~ /^ATG?C*[ATCG]+?A{3,10}$/) { print OUT "$_\n"; print "$_\n"; } } #close input and output files close(IN); close(OUT); exit();
excercise13input.txt
#this is the regex that we are looking for in the lines below #/^ATG?C*[ATCG]+?A{3,10}$/ ATGCCCAA ATGCCCAAAA ATGCCCAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
Excercise14.plx
#!/usr/bin/perl use strict; use warnings; #Open a web browser #Go to http://search.cpan.org/ #Type in “bioperl Tools BLAST” #Follow the link to Bio::Tools::Blast #Browse through this page and the example code #bioperl example code use strict; use warnings; #make the bioperl module (class) accessible to your program use Bio::Tools::BLAST; print"ok - ready to use Bio::Tools::BLAST";
Excercise 15 - install BioPerl
Install bioperl 1. At the command line prompt type ppm� 2. Then at the ppm prompt type��ppm> search bioperl�� 3. Then type��ppm> install bioperl Try this exercise at home. Installing libraries is not possible at UiO computers.
Excercise16.plx
#! /usr/local/bin/perl # Create and run a program which creates a Seq object and manipulates it: use Bio::Seq; # initiation of Seq object $seq = Bio::Seq->new('-seq' =>'CGGCGTCTGGAACTCTATTTTAAGAACCTCTCAAAACGAAACAAGC', '-desc' => 'An example', '-display_id' => 'NM_005476', '-accession_number' => '6382074', '-moltype' => 'dna'); # sequence manipulations $aa = $seq -> moltype(); # one of 'dna','rna','protein' $ab = $seq -> subseq(5,10); # part of the sequence as string $ac = $seq -> revcom; # returns an object of the reverse complemented sequence $ac1 = $ac -> seq(); $ad = $seq -> translate; # returns an object of the sequence translation $ad1 = $ad -> seq(); $ae = $seq -> translate(undef,undef,1); # returns an object of the sequence translation (using frame 1) (0,1,2 can be used)? $ae1 = $ae -> seq(); print "Molecule Type: $aa\n"; print "Sequence from 5 to 10: $ab\n"; print "Reverse complemented sequence: $ac1\n"; print "Translated sequence: $ad1\n"; print "Translated sequence (using frame 1): $ae1\n";
Excercise17.plx
Check out the code of several examples using BioPerl at: http://bip.weizmann.ac.il/course/prog2/perlBioinfo/
Another answer to excercise 12
#!/usr/bin/perl use strict; use warnings; #TASK: demonstrate the use of “my” in setting the #scope of a variable my $some_variable = 100; #body of the main program with the function call print "the value of some_variable is: $some_variable\n"; subroutine1(); print "but here, some_variable is still: $some_variable\n"; #subroutine using $some_variable sub subroutine1{ my $some_variable = 0; print "in subroutine1,some_variable is: $some_variable\n"; } #what happens if you comment out "use strict" and #remove "my" from lines 7 and 16
Another answer to excercise 13
#!/usr/bin/perl use strict; use warnings; #TASK: check your answers to the regex excercise #open input and output files open(IN,"myanswers.txt"); #read the input file line-by-line #for each line test if it matches a regular expression while(<IN>){ chomp; my $is_correct = does_it_match($_); if ($is_correct){ print "$_ is a match\n"; } else{ print "$_ is NOT a match\n"; } } #close input file and exit close(IN); exit(); #does it match sub does_it_match{ my($answer) = @_; my $is_correct = 0; if ($answer =~ m/^ATG?C*[ATCG]+?A{3,10}$/){ $is_correct = 1; } return $is_correct; }