Presentation is loading. Please wait.

Presentation is loading. Please wait.

11.1 Variable types in PERL ScalarArrayHash $number -3.54 $string %hash $array[0] $hash{key}

Similar presentations


Presentation on theme: "11.1 Variable types in PERL ScalarArrayHash $number -3.54 $string %hash $array[0] $hash{key}"— Presentation transcript:

1 11.1 Variable types in PERL ScalarArrayHash $number -3.54 $string "hi\n" @array %hash $array[0] $hash{key}

2 11.2 An associative array (or simply – a hash) is an unordered set of pairs of keys and values. Each key is associated with a value. A hash variable name starts with a “%”: my %hash; Initialization: %hash = ("a"=>5, "bob"=>"zzz", 50=>"John"); Accessing: you can access a value by its key: print $hash{50};John modifying: $hash{bob} = "aaa"; (modifying an existing value) adding: $hash{555} = "z"; (adding a new key-value pair) Hash – an associative array %hash 5"a" "zzz""bob" "John"50 "aaa" %hash 5"a" "aaa""bob" "John"50 "z"555

3 11.3 It is possible to get a list of all the keys in %hash my @hashKeys = keys(%hash); Similarly you can get an array of the values in %hash my @hashVals = values(%hash); Obtaining a list of the elements in a hash @hashVals 5 "John" "zzz" @hashKeys 50 "bob" "a" %hash 5"a" "zzz""bob" "John"50

4 11.4 You can use combinations of hashes (and arrays) together to construct more complex data structures. If the information is best represented in two levels it is useful to use a hash within a hash: my %hash; $hash{Key_level_1}{Key_level_2}; Hash within Hash

5 11.5 Example: each name in the phone book, has both phone number and address: my %phoneBook; $phoneBook{"Eyal"}{"Phone"} = "09-9545995"; $phoneBook{"Eyal"}{"Address"} = "115 Menora St., Hulun"; $phoneBook{"Ofir"}{"Phone"} = "054-4898799"; $phoneBook{"Ofir"}{"Address"} = "31 Horkanus St., Eilat"; Hash within Hash %phoneBook "Eyal" "Ofir" "Dudu" "09-9…""Phone" "Hulun""Addrs" "054-…""Phone" "Eilat""Addrs" 9245"Phone" TAU"Addrs" %phoneBook NAME => {Phone => PHONE Address => ADDRESS} Key I: nameKey II: dataType Corresponding Value

6 11.6 Assignment: my %phoneBook; $phoneBook{"Eyal"}{"Phone"} = "09-9545995"; $phoneBook{"Eyal"}{"Address"} = "115 Menora St., Hulun"; Access: print $phoneBook{"Eyal"}{"Phone"};09-9545995 Modify: $phoneBook{"Eyal"}{"Phone"} = 03-6407963; Hash within Hash %phoneBook "Eyal" "Ofir" "Dudu" "09-9…""Phone" "Hulun""Addrs" "054-…""Phone" "Eilat""Addrs" 9245"Phone" TAU"Addrs" %phoneBook NAME => {Phone => PHONE Address => ADDRESS}

7 11.7 More Complex Data Structures

8 11.8 “How to keep the phone number, address and list of grades for each student in a course?” $phoneBook{"Eyal"}{"Phone"} = 7693; $phoneBook{"Eyal"}{"Address"} = "34 HaShalom St."; $phoneBook{"Eyal"}{"Grades"}[0]= 93; $phoneBook{"Eyal"}{"Grades"}[1]= 72; $phoneBook{"Eyal"}{"Grades"}[2]= 87; print $phoneBook{"Eyal"}{"Grades"}[2]; 87 Array within hash within hash… %phoneBook NAME => { " Phone " => PHONE " Address " => ADDRESS " Grades " => [GRADES]} %phoneBook "Eyal" "Ofir" 7693"Phone" "34…""Addrs" "Grades" 728793 9245"Phone" TAU"Addrs" "Grades" 8210090

9 11.9 An alternative way to insert the array of grades: $phoneBook{"Eyal"}{"Phone"} = 7693; $phoneBook{"Eyal"}{"Address"} = "34 HaShalom St."; @grades = (93,72,87); $phoneBook{"Eyal"}{"Grades"} = [@grades]; print $phoneBook{"Eyal"}{"Grades"}[2]; 87 Array within hash within hash… %phoneBook NAME => { " Phone " => PHONE " Address " => ADDRESS " Grades " => [GRADES]} %phoneBook "Eyal" "Ofir" 7693"Phone" "34…""Addrs" "Grades" 728793 9245"Phone" TAU"Addrs" "Grades" 8210090 The will create a copy of @grades

10 11.10 How would you make a matrix? my @matrix; matrix[0][0] = 23; matrix[0][1] = 5;... How would you make a 3D matrix?? How would you make a array of hashes??? To Infinity and Beyond!!

11 11ex.11 %genes PRODUCT => { " protein_id " => PROTEIN_ID " strand " => STRAND " CDS " => [START, END]} %genes PRODUCT => { " protein_id " => PROTEIN_ID " strand " => STRAND} %genes PRODUCT => { " protein_id " => PROTEIN_ID} Class exercise 11a 1. Read the adenovirus genome file and build a hash of genes, where the key is the "product" name: For each gene store a hash with the protein ID. Print all keys (names) in the hash. 2. Add to the hash the strand of the gene on the genome: “ + ” for the sense strand and “ - ” for the antisense strand. Print all antisense genes. 3. Add to the hash an array of two coordinates – the start and end of the CDS. Print genes shorter than 500bp. 4*. Print the product name of all genes on the sense strand whose CDS spans more than 1kbp, and all genes on the antisense strand whose CDS spans less than 500bp.

12 11.12 Subroutines

13 11.13 A subroutine is a user-defined function. Subroutine definition: sub SUB_NAME { # Do something... } Note: Subroutine definitions may be placed anywhere in a script, but they are usually placed together at the beginning or the end. Subroutines For example: sub printHello { print "Hello world\n"; }

14 11.14 To invoke (execute) a subroutine: SUB_NAME(PARAMETERS); Subroutines For example: printHello(); Hello world print reverseComplement("GCAGTG"); CGTCAC

15 11.15  Code in a subroutine is reusable (i.e. it can be invoked from several points in the script, no code duplication) e.g. a subroutine that reverse-complement a DNA sequence  A subroutine can provide a general solution that may be applied in different situations. e.g. read a FASTA file Why use subroutines?

16 11.16  Encapsulation: A well defined task can be done in a subroutine, making the main script simpler and easier to read and understand. For example: $seq = readFastaFile($fileName); # reads a FASTA sequence $revSeq = reverseComplement($seq); # reverse complement the sequnce printFasta($revSeq); # prints the sequence in FASTA format Why use subroutines? - Example

17 11.17 A subroutine may be given arguments through the special array variable @_: sub bartFunc { my ($string, $times) = @_; print $string x $times; } my $bart4today = "I will not eat things for money\n"; bartFunc($bart4today,100); I will not eat things for money I will not eat things for money I will not eat things for money I will not eat things for money I will not eat things for money Subroutine arguments

18 11.18 Definition: sub reverseComplement { my ($seq) = @_; $seq =~ tr/ACGT/TGCA/; $seq = reverse $seq; return $seq; } Usage: my $revSeq = reverseComplement("GCAGTG"); CACTGC Notes:  The return function ends the execution of the subroutine and returns a value.  If there is no (explicit) return statement, the value of the last statement in the subroutine is returned. Return value

19 11.19 A subroutine may also return a list value: sub integerDivide { my ($a,$b) = @_; my $mana = int($a/$b); my $sheerit = $a % $b; return ($mana,$sheerit); } my ($myMana,$mySheerit) = integerDivide(7,3); print "mana= $mana, sheerit= $sheerit"; mana= 2, sheerit= 1 Return value a list

20 11.20 When a variable is defined using my inside a subroutine: * It does not conflict with a variable by the same name outside the subroutine * It’s existence is limited to the scope of the subroutine sub printHello { my ($name) = @_; print "Hello $name\n"; } my $name = "Yossi"; printHello("Moshe"); print "Bye $name\n"; Note: This effect also holds for my variables in any other “block” of statements in curly brackets – {…} (such as in if-else controls and in loops) Variable scope Hello Moshe Bye Yossi

21 11ex.21 Class exercise 11b 1. Write a subroutine that takes two numbers and prints their sum to the screen (and test it with an appropriate script!) 2. Write a subroutine that takes two numbers and return a list of their sum, difference, and average. For example: @arr = numbersFunc(5,7); print "@arr"; 12 -2 6 3. a. Write a subroutine that takes a sentence and returns the last word. b.* Return the longest word!


Download ppt "11.1 Variable types in PERL ScalarArrayHash $number -3.54 $string %hash $array[0] $hash{key}"

Similar presentations


Ads by Google