64
Tutto Perl in 2 ore The CRIBI Crash Course Andrea Telatin e Giovanni Birolo Bioinformatics Unit, CRIBI

Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Embed Size (px)

DESCRIPTION

Introduction to Perl programming, practical lesson held at BMR Genomics for the "Introduction to Bioinformatics Programming".

Citation preview

Page 1: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Tutto Perl in 2 oreThe CRIBI Crash Course

Andrea Telatin e Giovanni Birolo Bioinformatics Unit, CRIBI

Page 2: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

from: http://www.zoitz.com/archives/13

Page 3: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Homeworks

fatti?

Page 4: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Cosa voglio fare?

• Dato un allineamento in formato SAM (INPUT)!

• Calcolare quante read sono allineate in ciascun cromosoma (TASK)

• E stampare una “tabella” con tre colonne: cromosoma, numero di allineamenti, percentuale (OUTPUT)

Page 5: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Tipi di dati• Variabili scalari (testo o numeri) come $nome

• contengono 1 nome o numero $nome = ‘pino’;

• Array di scalari (…) come @array

• elenco di scalari @nome = (‘lino’, ‘giovanni’, $nome);

• Array associativi, od hash %hash

• chiave e valore come %eta = (‘lino’ => 21, ‘momi’ => 2);

Page 6: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Array

• Sono liste di scalari

• Creazione di un array vuoto: @appello = ();

• Inizializzazione di un array: @appello = (‘Giov’, ‘Andre’, ‘Nick’, ‘Risso’, ‘Chuck’); @prova = (‘Mio’, ‘Tuo’, 21, 22.2, ‘Tombola’);

Page 7: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Array e indici• dato l’array:

@array = (‘Uno’, ‘due’, ‘tre’, $jolly, $altro);

• ogni elemento ha un indice numerico da 0 a n.

• l’ultimo indice è $#array. Quanti elementi in tutto?

• $terzo = $array[2]; print “Il terzo elemento è $terzo (= $array[2])\n”; print “L’ultimo elemento ha indice $#array, ed è $array[-1]\n”;

Page 8: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Funzioni per array• aggiungi una variabile: push

push(@array, ‘Nuovo elemento’); push(@array, ‘Uno’, ‘due’, ‘tre’, $jolly, $altro);

• estrai la prima variabile (e toglila): shift $primo = shift(@array); shift(@array);

• estrai l’ultima variabile (e toglila): pop$ultima = pop(@array);

Page 9: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Funzioni per array• in sintesi…

Page 10: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Hash (o array associativi)• Sono liste non ordinate di coppie di valori, il primo

si chiama “chiave” (deve essere univoco), l’altro “valore”

• Creazione di un hash vuoto: %hash = ();"

• Inizializzazione di un hash: %nomi = (‘geno-1’ => ‘Momi’, ‘geno-2’ => ‘Carlo’, ‘geno-33’ => ‘Dietelmo’);

Page 11: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Hash (o array associativi)

• Dato l’hash %nomi = (‘geno-1’ => ‘Momi’, ‘geno-2’ => ‘Carlo’, ‘geno-33’ => ‘Dietelmo’);"

• Per avere il valore data la chiave: print “Il nome di \”geno-1\” è $nomi{‘geno-1’}”;

Page 12: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Hash (o array associativi)

• Dato l’hash %nomi = (‘geno-1’ => ‘Momi’, ‘geno-2’ => ‘Carlo’, ‘geno-33’ => ‘Dietelmo’);"

• Per avere il valore data la chiave: foreach $chiave (keys %nomi) { $c++; print “Login:$chiave\tNome:$nomi{$chiave}\n”; }print “Ho trovato $c login nell’hash\n”;

Page 13: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Blocco di codice• Un set di istruzioni da essere eseguite si chiama

blocco, ed in Perl è un listato racchiuso da graffe.!

!

• { blocco di comandi… ogni comando deve finire con un “;” }

Page 14: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Numeric operatorsOPERATIONS!

• $num = $i + $c;

• $num = $i - $c;

• $num = $i / $c;

• $num = $i % $c;

• $num = $i ** $c;

SHORTCUT FOR SELF!

• $num += $c;*

• $num -= $c;

• $num /= $c;

• $num %= $c;

equal to $num = $num + $c;*

Page 15: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Numeric operatorsINCREMENTING/DECREMENTING:!

$number = $number + 1 is a very common operation.

The general shortcut is $number += 1;

We can go further: $number++;

Same for $number--;

Page 16: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

String operatorsOPERATIONS!

• Concatenation: $t = $f . $p;

• Multiply:$num = $i x $c;

* again you can shortcut: $string .= $add is equal to $string = $string.$add;

Example!

$f = ‘ciao’;$p = ‘!’;

$p1 = $p x 5; # result=!!!!!$t = $f . $p1; # result= ciao!!!!!

Page 17: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Comparison operatorsNUMERIC!

• 2 == 2

• 2 != 4

• 2 < 3

• 3 > 1

• 4 >= 2

STRINGS!

• ‘me’ eq ‘me’

• ‘me’ ne ‘you’

• other are less used

Remember that the =!

is used to assign a value.!

NEVER for comparison

Page 18: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Verificare condizioni

Page 19: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

If …• Eseguo un blocco di codice se si verifica una

condizione

if ($nome eq ‘Giovanni’) { # eseguo tutto quello che è fra { e } print “CIAO!\n”; } else { # eseguo tutto quest’altro blocco print “E allora, chi sei?\n”; }

1 2 3 4 5 6 7 8 9 10 11

Page 20: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

If …• Eseguo un blocco di codice se si verifica una

condizione

if ($nome eq ‘Giovanni’) { # eseguo tutto quello che è fra { e } print “CIAO!\n”; } else { # eseguo tutto quest’altro blocco print “E allora, chi sei?\n”; }

1 2 3 4 5 6 7 8 9 10 11

Condizione che deve essere VERA

Page 21: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

If …• Eseguo un blocco di codice se si verifica una

condizione

if ($nome eq ‘Giovanni’) { # eseguo tutto quello che è fra { e } print “CIAO!\n”; } else { # eseguo tutto quest’altro blocco print “E allora, chi sei?\n”; }

1 2 3 4 5 6 7 8 9 10 11

Blocco di codice eseguito SE la condizione è verificata

Page 22: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

If …• Eseguo un blocco di codice se si verifica una

condizione

if ($nome eq ‘Giovanni’) { # eseguo tutto quello che è fra { e } print “CIAO!\n”; } else { # eseguo tutto quest’altro blocco print “E allora, chi sei?\n”; }

1 2 3 4 5 6 7 8 9 10 11

Blocco di codice eseguito SE la condizione è verificata

La condizione deve poter essere “vera” o “falsa” Esempi: La riga corrente è di intestazione FASTA? —> Ovvero il primo carattere è un “>” !!

Page 23: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

CicliOvvero come reiterare un {blocco} di operazioni

Page 24: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

In generale

• Un ciclo ripete un blocco di operazioni un certo numero di volte

• Generalmente ho una variabile “temporanea” da usare per tener traccia di quante iterazioni ho fatto

Page 25: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

While …• Eseguo un blocco di codice fin tanto che una

condizione è vera (ovvero finché non diventa falsa)

while (piove) { print “Sono stanco della pioggia…\n”; } print “ FINALMENTE IL SOLEEEEE\n”;

1 2 3 4 5 6 7 8 9 10 11

Page 26: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

While …• Eseguo un blocco di codice fin tanto che una

condizione è vera (ovvero finché non diventa falsa)

while ($risultato < 1000) { $risultato = $risultato**2; print “Siamo arrivati a $risultato\n”; } print “ FINE: $risultato >= 1000\n”;

1 2 3 4 5 6 7 8 9 10 11

Page 27: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

While …• Eseguo un blocco di codice fin tanto che una

condizione è vera (ovvero finché non diventa falsa)

while ($risultato < 1000) { $risultato = $risultato**2; print “Siamo arrivati a $risultato\n”; } print “ FINE: $risultato >= 1000\n”;

1 2 3 4 5 6 7 8 9 10 11

Condizione: entro nel ciclo WHILE solo se è VERA (altrimenti lo salto)

Page 28: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

While …• Eseguo un blocco di codice fin tanto che una

condizione è vera (ovvero finché non diventa falsa)

while ($risultato < 1000) { $risultato = $risultato**2; print “Siamo arrivati a $risultato\n”; } print “ FINE: $risultato >= 1000\n”;

1 2 3 4 5 6 7 8 9 10 11

Questo blocco di codice viene eseguito FINO A CHE la condizione è vera.

Attenzione: anche all’infinito se non cambia qualcosa durante l’esecuzione

Page 29: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

While …• Eseguo un blocco di codice fin tanto che una

condizione è vera (ovvero finché non diventa falsa)

while (il file non è finito) { $riga = leggi_una_riga(); $contaRighe++; } print “ Il file ha $contaRighe righe\n”;

1 2 3 4 5 6 7 8 9 10 11

L’uso tipico che faremo è leggere un file riga per riga. La condizione che verifichiamo è che non sia l’ultima riga. Non sappiamo a priori quante righe sono, ma sappiamo

che dopo l’ultima dobbiamo uscire :)

Page 30: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

For …• Eseguo un blocco di codice un certo numero di

volte, usando una variabile “contatore”

for ($i=10; $i<20; $i++) { # eseguo tutto quello che è fra { e } print “Ciao, $i volta su 20!\n”; }

1 2 3 4 5 6 7 8 9 10 11

Page 31: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

For …• Eseguo un blocco di codice un certo numero di

volte, usando una variabile “contatore”

for ($i=10; $i<20; $i++) { # eseguo tutto quello che è fra { e } print “Ciao, $i volta su 20!\n”; }

1 2 3 4 5 6 7 8 9 10 11

Inizializzo il contatore

Page 32: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

For …• Eseguo un blocco di codice un certo numero di

volte, usando una variabile “contatore”

for ($i=10; $i<20; $i++) { # eseguo tutto quello che è fra { e } print “Ciao, $i volta su 20!\n”; }

1 2 3 4 5 6 7 8 9 10 11

Eseguo fintanto che questa condizione è VERA

Page 33: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

For …• Eseguo un blocco di codice un certo numero di

volte, usando una variabile “contatore”

for ($i=10; $i<20; $i++) { # eseguo tutto quello che è fra { e } print “Ciao, $i volta su 20!\n”; }

1 2 3 4 5 6 7 8 9 10 11

Eseguo questa operazione AD OGNI CICLO (ovvero incremento il contatore)

Page 34: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

For …• Eseguo un blocco di codice un certo numero di

volte, usando una variabile “contatore”

for ($i=10; $i<20; $i++) { # eseguo tutto quello che è fra { e } print “Ciao, $i volta su 20!\n”; }

1 2 3 4 5 6 7 8 9 10 11

Eseguo questa operazione AD OGNI CICLO (ovvero incremento il contatore)

Page 35: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

For …• Eseguo un blocco di codice un certo numero di

volte, usando una variabile “contatore”

for ($i=10; $i<20; $i++) { # eseguo tutto quello che è fra { e } print “Ciao, $i volta su 20!\n”; }

1 2 3 4 5 6 7 8 9 10 11

Page 36: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Ultimo ciclo: foreach• ripeti un blocco di codice per ciascun elemento

di un array!

• Proviamo senza: @lista = (‘ciao’, ‘mondo’, ‘crudele’); for ($i=0; $i<=$#lista; $i++) { $elemento = $lista[$i]; print “ -> $elemento\n”; }

Page 37: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Ultimo ciclo: foreach• ripeti un blocco di codice per ciascun elemento

di un array!

• Proviamo con:@lista = (‘ciao’, ‘mondo’, ‘crudele’); foreach $elemento (@lista) { print “ - $elemento\n”; }"

• In italiano vuol dire scorri l’array e ad ogni ciclo metti l’elemento corrente dentro una comoda variabile.

Page 38: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Un po’ di funzioni

Page 39: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Lessico

• Una funzione puo’ richiedere o meno dei parametri, si chiamano argomenti!

• Se una funzione emette un risultato, si dice che “restituisce”, o ritorna, un valore.

• Una funzione può restituire scalari, array o altro…

valore = funzione(argomenti)

Page 40: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

una prima funzione: int

• la funzione int() rimuove i decimali di un numero, che li abbia o meno

• int($numero) restituisce il numero troncato, ma non altera il suo argomento

• $intero = int(9/8); $intero = int($fraction);

print “Ciao!\n”; $stud = 29; $bisc = 291;"# si aggiunge uno# studente! $stud++;"$bps = $bisc/$stud;"$tondi = int($bps);"print “Ogni studente avrà $tondi biscotti\n”;"

Page 41: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

un’altra funzione: sqrt

• la funzione sqrt() ritorna la radice quadrata dell’argomento.

• sqrt($numero) restituisce un numero, potenzialmente con la virgola

• $radice = sqrt(9/8); $root = sqrt($valore*2);

print “Lato quadrato\n”; $area = 1000; $lato = sqrt($area);"!print “ Area: $area cm2Lato: $lato cm\n”;

Page 42: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

casualità: rand• la funzione rand() ritorna un

numero casuale.

• rand() ritorna da 0 a 1.

• Se specifico un argomento: rand(10) da 0 a 9.99.

• $num = rand(); $num = int(rand(91));

# Programma lancia dadi!print “Lancio n dadi\n”;"

!$num_dadi = 20;"

for ($i=1; $i<=$num_dadi; $i++) {"

$valore = int(rand(6))+1;"

print “Dado n. $i: $valore\n”;"

}"

!print “Ho finito.\n”;

Page 43: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

ancora su print• print stampa una stringa da qualche parte :)

• print DOVE “Stringa da stampare”.

• Dove è un “filehandle” che avete creato voi, o uno standard come STDOUT o STDERR.

• print “Questo va in output”; # sottinteso STDOUT print STDERR “Attenzione!\n”; # Importante per messaggiprint O “Stampa sul file…”; #vedi oltre

Page 44: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

ancora su print

• Abituatevi fin da subito a usare print STDERR “Messaggio\n”;per i messaggi informativi!

• E usare print “Valori e risultati…\n”;per l’output vero e proprio del programma

Page 45: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

funzioni per stringhe• uc($stringa) converte una stringa

in maiuscolo

• lc($stringa), in minuscolo

• length($stringa) riporta la lunghezza in caratteri

• $NOME = uc($nome); $size = length($dna);

print “Ciao!\n”; $stud = 29; $bisc = 291;"# si aggiunge uno# studente! $stud++;"$bps = $bisc/$stud;"print “Ogni studente avrà $bps biscotti\n”;"$tondo = int($bps);"print “Intero = $tondo\n”;"

Page 46: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Togliere \n da stringhe

• la funzione chop() toglie (e restituisce) l’ultimo carattere di una stringa:$last = chop($string);"

• la funzione chomp() toglie l’ultimo carattere solo se è un a capo. chomp($riga);

print “Ciao!\n”; $stud = 29; $bisc = 291;"# si aggiunge uno# studente! $stud++;"$bps = $bisc/$stud;"print “Ogni studente avrà $bps biscotti\n”;"$tondo = int($bps);"print “Intero = $tondo\n”;"

Page 47: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Holy grail: substr• “substring”: a function to retrieve a slice of a string

• $stringa = ‘pipi e pupu’; $slice = substr($stringa, 3, 6); # conterrà “i e pu”

• Tutte le funzioni accettano variabili come argomenti:$slice = substr($stringa, $from, $span);"

• Può fare cose più complicate! —> Leggi il manuale

Page 48: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Un primo esempio$sequenza = ‘ACGATCGTACGTAGCTGACTGATCGTACGTAACGTACGTAGCTGACTGATCGATCGTAGCTAGCAGCTGATCGACTGACTGACTGATCGATCGTACGTAGCTAGCTGACTGATC’;"

$lunghezza = length($sequenza); $lunghezza_read = 12; $posizione = int(rand($lunghezza - $lunghezza_read); $seq = substr($sequenza, $posizione, $lunghezza_read);

print “>Random\n$seq\n”;

Page 49: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

dividere stringe: split• split spezza una stringa ogni volta che trova un

pattern (il pattern viene rimosso).

• I pezzi possono essere tanti quindi restituisce un array!

• $stringa = ‘Giovanni Giuseppe Lanfranchi’; @campi = split(“ ”, $stringa); @prova = split(“Gi”, $stringa); print “ $campi[0], $campi[2]\n$prova[0] -> $prova[1]\n”;

Page 50: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

dividere stringe: split

• Un file SAM è un file tabulato (ogni campo è separato da “tab”, che ha come simbolo \t

• @campi = split(“\t”, $riga_sam); $num_campi = $#campi + 1; print “Nome sequenza: $campi[0], cromosoma: $campi[2]\n”;

Page 51: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

unire stringhe: join• al contrario di split che prende una stringa e la

spezza (creando un array), join prende un array e lo unisce in una stringa

• Il pattern in questo caso funge da “separatore”.

• $nuova_riga_sam = join(@pezzi, “\t”); @nomi = (‘Pino’, ‘Macino’, ‘Momi’); $elenco = join(@nomi, “; ”);

Page 52: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

mettere in ordine: sort

• restituisce un array ordinato alfabeticamente, non modifica l’originale

@sorted = sort(@appello);"

• con dei trucchi si ordina secondo altri criteri, ad esempio:

@numeri = sort {$a <=> $b} (@lista_numeri);

Page 53: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

hash e i suoi array: keys• un hash è un doppio array, un array “chiavi” in

relazione con un array “valori”. @chiavi = keys(%hash); @valori = values(%hash);

• In questo modo possiamo usare le funzioni già note per gli array, ad esempio il ciclo foreach diventa: foreach $key (keys %hash) { … }

Page 54: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Un array speciale @ARGV• @ARGV contiene tutti i parametri passati dalla riga

di comando (shell)

• esempio: $ perl tuoprogr.pl ciao caro! (comando) print “$ARGV[0] $ARGV[1]\n”; (tuoprog.pl)

Page 55: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Un array speciale @ARGV• @ARGV contiene tutti i parametri passati dalla riga di

comando (shell)

• esempio: $ perl tuoprogr.pl ciao caro! (comando) foreach $parametro (@ARGV) { $c++; print “Parametro n. $c: \”$parametro\””; }if ($c>1) { $suff = ‘i’; } else { $suff = ‘o’; }print “L’utente ha mandato $c parametr$suff …\n”;

Page 56: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Leggere un file• Consideriamo di avere un file chiamato “lista.txt” nella

directory /home/geno/files/.

• Aprire un file significa permettere a Perl di leggerlo una riga alla volta.

• Comando per aprire un file:

• open(F, “nomefile”);"

• é una funzione, restituisce (ritorna) come valore VERO (tutto OK) o FALSO (non riesco ad aprire il file)

Page 57: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

“Aprire” un file• Come si usa il comando open? È una funzione che

restituisce vero se riesce o falso se non.if (open(I, “filename”)) { print “Ho aperto il file.\n”; } else { die “ Non riesco ad aprire il file filename.\n”; }

• Tipicamente useremo una variabile che contiene il nome del file, tipo open(I, “$filename”)

• Come si legge il file poi?

Page 58: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Leggere un file• if (open(SAM, “filename”) == 0) {

die “ Non riesco ad aprire il file filename.\n”; }

• Come si legge il file poi? Perl ce lo fa leggere riga per riga, con un ciclo while while ($riga = <SAM>) { print “$riga”; }"

• Attenzione: $riga contiene sempre l’a-capo alla fine! Se non serve usare chomp($riga)!

Page 59: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Leggere un file: cat.pl• if (open(I, “$filename”) == 0) {

die “ Non riesco ad aprire il file \“$filename\”.\n”; }while ($riga = <I>) { chomp($riga); $c++; print “$riga\n”; }print STDERR “Ho finito di leggere il file: ha $c righe totali.\n”;

Page 60: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Leggere un file: cat.pl• $filename = $ARGV[0];

if ($filename eq ‘’) { die “ ERROR: Questo programma richiede il nome di un file!\n”; }if (open(I, “$filename”) == 0) { die “ Non riesco ad aprire il file \“$filename\”.\n”; }while ($riga = <I>) { chomp($riga); $c++; print “$riga\n”; }print STDERR “Ho finito di leggere il file: ha $c righe totali.\n”;

Page 61: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Traslitterare una stringa• $s = ‘sono una simpatica stringa’;"

• Per verificare se una variabile contiene un pattern:$s =~tr/da/a/; "

• Esempi:$s =~tr/i/X/; # adesso s = sono una sXmpatXca strXnga $seq = ‘ACACGTAGCTGACT’; $seq = reverse($seq); $seq =~tr/ACGT/tgca/;

Page 62: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Cercare un pattern• $s = ‘sono una simpatica stringa’;"

• Per verificare se una variabile contiene un pattern: $s =~/pattern/ "

• Esempi: if ($s =~/simpatica/) { print “ Stringa simpatica”; }

Page 63: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

Rendere gli script eseguibili• Per lanciare uno script invochiamo l’interprete “perl”,

del tipo perl /home/dir/file.pl

• Possiamo rendere lo script “eseguibile” dalla shell e invocabile semplicemente come /home/dir/file.pl"

• Dobbiamo aggiungere come prima riga dello script: #!/usr/bin/env perl

• E poi dalla shell dare questo comando una sola volta: chmod +x /home/dir/file.pl

Page 64: Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014

live demo