SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
Tutto Perl in 2 ore
The CRIBI Crash Course
Andrea Telatin e Giovanni Birolo
Bioinformatics Unit, CRIBI
from: http://www.zoitz.com/archives/13
Homeworks
fatti?
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)
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);
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’);
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”;
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);
Funzioni per array
• in sintesi…
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’);
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’}”;
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:$chiavetNome:$nomi{$chiave}n”;

}

print “Ho trovato $c login nell’hashn”;
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 “;”

}
Numeric operators
OPERATIONS!
• $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;*
Numeric operators
INCREMENTING/DECREMENTING:!
$number = $number + 1 is a very common
operation.
The general shortcut is $number += 1;
We can go further: $number++;
Same for $number--;
String operators
OPERATIONS!
• 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!!!
Comparison operators
NUMERIC!
• 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
Verificare condizioni
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
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
Condizione che deve essere VERA
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
Blocco di codice eseguito SE
la condizione è verificata
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
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 “>”
!
!
Cicli
Ovvero come reiterare un {blocco} di operazioni
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
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 SOLEEEEEn”;
1
2
3
4
5
6
7
8
9
10
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 $risultaton”;
}
print “ FINE: $risultato >= 1000n”;
1
2
3
4
5
6
7
8
9
10
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 $risultaton”;
}
print “ FINE: $risultato >= 1000n”;
1
2
3
4
5
6
7
8
9
10
Condizione: entro nel ciclo WHILE
solo se è VERA (altrimenti lo salto)
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 $risultaton”;
}
print “ FINE: $risultato >= 1000n”;
1
2
3
4
5
6
7
8
9
10
Questo blocco di codice viene eseguito
FINO A CHE la condizione è vera.
Attenzione: anche all’infinito se non cambia
qualcosa durante l’esecuzione
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 righen”;
1
2
3
4
5
6
7
8
9
10
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 :)
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
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
Inizializzo il contatore
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
Eseguo fintanto che questa condizione è VERA
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
Eseguo questa operazione AD OGNI CICLO
(ovvero incremento il contatore)
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
Eseguo questa operazione AD OGNI CICLO
(ovvero incremento il contatore)
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
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 “ -> $elementon”;

}
Ultimo ciclo: foreach
• ripeti un blocco di codice per ciascun elemento
di un array!
• Proviamo con:



@lista = (‘ciao’, ‘mondo’, ‘crudele’);

foreach $elemento (@lista) {

print “ - $elementon”;

}"
• In italiano vuol dire scorri l’array e ad ogni ciclo metti
l’elemento corrente dentro una comoda variabile.
Un po’ di funzioni
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)
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 biscottin”;"
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 quadraton”;



$area = 1000; 

$lato = sqrt($area);"
!
print “ Area: $area cm2

Lato: $lato cmn”;
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 dadin”;"
!
$num_dadi = 20;"
for ($i=1; $i<=$num_dadi; $i++) {"
$valore = int(rand(6))+1;"
print “Dado n. $i: $valoren”;"
}"
!
print “Ho finito.n”;
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 messaggi

print O “Stampa sul file…”; #vedi oltre
ancora su print
• Abituatevi fin da subito a usare

print STDERR “Messaggion”;

per i messaggi informativi!
• E usare 

print “Valori e risultati…n”;

per l’output vero e proprio del programma
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 biscottin”;"
$tondo = int($bps);"
print “Intero = $tondon”;"
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 biscottin”;"
$tondo = int($bps);"
print “Intero = $tondon”;"
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

Un primo esempio
$sequenza =
‘ACGATCGTACGTAGCTGACTGATCGTACGTAACGTACGTAGCT
GACTGATCGATCGTAGCTAGCAGCTGATCGACTGACTGACTGAT
CGATCGTACGTAGCTAGCTGACTGATC’;"
$lunghezza = length($sequenza);

$lunghezza_read = 12;

$posizione = int(rand($lunghezza - $lunghezza_read);

$seq = substr($sequenza, $posizione, $lunghezza_read);

print “>Randomn$seqn”;
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”;
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”;

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, “; ”);

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);
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) {

…

}
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)
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”;

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)
“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?
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)!
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 “$rigan”;

}

print STDERR “Ho finito di leggere il file: ha $c righe totali.
n”;
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 “$rigan”;

}

print STDERR “Ho finito di leggere il file: ha $c righe totali.n”;
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/;
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”;

}

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
live demo

Más contenido relacionado

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

Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolarePyCon Italia
 
Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSL
Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSLCorso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSL
Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSLMassimiliano Masi
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Glossario asp,sql
Glossario asp,sqlGlossario asp,sql
Glossario asp,sqlLaura Ulivi
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)STELITANO
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 

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

Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSL
Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSLCorso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSL
Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSL
 
Stringhe java
Stringhe javaStringhe java
Stringhe java
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Glossario asp,sql
Glossario asp,sqlGlossario asp,sql
Glossario asp,sql
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 
Amazon S3 in Perl
Amazon S3 in PerlAmazon S3 in Perl
Amazon S3 in Perl
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Espressioni regolari
Espressioni regolariEspressioni regolari
Espressioni regolari
 

Más de Andrea Telatin

Next Generation Sequencing revolution (February 2010 - PhD retreat)
Next Generation Sequencing revolution (February 2010 - PhD retreat)Next Generation Sequencing revolution (February 2010 - PhD retreat)
Next Generation Sequencing revolution (February 2010 - PhD retreat)Andrea Telatin
 
A primer on microbial diversity: 16S Amplicons analysis
A primer on microbial diversity: 16S Amplicons analysisA primer on microbial diversity: 16S Amplicons analysis
A primer on microbial diversity: 16S Amplicons analysisAndrea Telatin
 
Flash introduction to Qiime2 -- 16S Amplicon analysis
Flash introduction to Qiime2 -- 16S Amplicon analysisFlash introduction to Qiime2 -- 16S Amplicon analysis
Flash introduction to Qiime2 -- 16S Amplicon analysisAndrea Telatin
 
First adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteFirst adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteAndrea Telatin
 
Sequenziamento ed assemblaggio di genomi batterici
Sequenziamento ed assemblaggio di genomi battericiSequenziamento ed assemblaggio di genomi batterici
Sequenziamento ed assemblaggio di genomi battericiAndrea Telatin
 
PHP 7.0 new features (and new interpreter)
PHP 7.0 new features (and new interpreter)PHP 7.0 new features (and new interpreter)
PHP 7.0 new features (and new interpreter)Andrea Telatin
 
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR Genomics
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR GenomicsTarget Enrichment with NGS: Cardiomyopathy as a case study - BMR Genomics
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR GenomicsAndrea Telatin
 
Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...
Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...
Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...Andrea Telatin
 
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...Andrea Telatin
 
Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014
Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014
Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014Andrea Telatin
 
Introduction to 16S Analysis with NGS - BMR Genomics
Introduction to 16S Analysis with NGS - BMR GenomicsIntroduction to 16S Analysis with NGS - BMR Genomics
Introduction to 16S Analysis with NGS - BMR GenomicsAndrea Telatin
 

Más de Andrea Telatin (11)

Next Generation Sequencing revolution (February 2010 - PhD retreat)
Next Generation Sequencing revolution (February 2010 - PhD retreat)Next Generation Sequencing revolution (February 2010 - PhD retreat)
Next Generation Sequencing revolution (February 2010 - PhD retreat)
 
A primer on microbial diversity: 16S Amplicons analysis
A primer on microbial diversity: 16S Amplicons analysisA primer on microbial diversity: 16S Amplicons analysis
A primer on microbial diversity: 16S Amplicons analysis
 
Flash introduction to Qiime2 -- 16S Amplicon analysis
Flash introduction to Qiime2 -- 16S Amplicon analysisFlash introduction to Qiime2 -- 16S Amplicon analysis
Flash introduction to Qiime2 -- 16S Amplicon analysis
 
First adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteFirst adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram Institute
 
Sequenziamento ed assemblaggio di genomi batterici
Sequenziamento ed assemblaggio di genomi battericiSequenziamento ed assemblaggio di genomi batterici
Sequenziamento ed assemblaggio di genomi batterici
 
PHP 7.0 new features (and new interpreter)
PHP 7.0 new features (and new interpreter)PHP 7.0 new features (and new interpreter)
PHP 7.0 new features (and new interpreter)
 
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR Genomics
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR GenomicsTarget Enrichment with NGS: Cardiomyopathy as a case study - BMR Genomics
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR Genomics
 
Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...
Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...
Bioinformatica: Esercizi su Perl, espressioni regolari e altre amenità (BMR G...
 
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...
 
Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014
Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014
Bioinformatica: introduzione (BMR Genomics) - Lezione 25 luglio 2014
 
Introduction to 16S Analysis with NGS - BMR Genomics
Introduction to 16S Analysis with NGS - BMR GenomicsIntroduction to 16S Analysis with NGS - BMR Genomics
Introduction to 16S Analysis with NGS - BMR Genomics
 

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

  • 1. Tutto Perl in 2 ore The CRIBI Crash Course Andrea Telatin e Giovanni Birolo Bioinformatics Unit, CRIBI
  • 4. 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)
  • 5. 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);
  • 6. 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’);
  • 7. 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”;
  • 8. 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);
  • 9. Funzioni per array • in sintesi…
  • 10. 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’);
  • 11. 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’}”;
  • 12. 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:$chiavetNome:$nomi{$chiave}n”;
 }
 print “Ho trovato $c login nell’hashn”;
  • 13. 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 “;”
 }
  • 14. Numeric operators OPERATIONS! • $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;*
  • 15. Numeric operators INCREMENTING/DECREMENTING:! $number = $number + 1 is a very common operation. The general shortcut is $number += 1; We can go further: $number++; Same for $number--;
  • 16. String operators OPERATIONS! • 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!!!
  • 17. Comparison operators NUMERIC! • 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
  • 19. 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
  • 20. 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 Condizione che deve essere VERA
  • 21. 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 Blocco di codice eseguito SE la condizione è verificata
  • 22. 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 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 “>” ! !
  • 23. Cicli Ovvero come reiterare un {blocco} di operazioni
  • 24. 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
  • 25. 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 SOLEEEEEn”; 1 2 3 4 5 6 7 8 9 10
  • 26. 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 $risultaton”; } print “ FINE: $risultato >= 1000n”; 1 2 3 4 5 6 7 8 9 10
  • 27. 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 $risultaton”; } print “ FINE: $risultato >= 1000n”; 1 2 3 4 5 6 7 8 9 10 Condizione: entro nel ciclo WHILE solo se è VERA (altrimenti lo salto)
  • 28. 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 $risultaton”; } print “ FINE: $risultato >= 1000n”; 1 2 3 4 5 6 7 8 9 10 Questo blocco di codice viene eseguito FINO A CHE la condizione è vera. Attenzione: anche all’infinito se non cambia qualcosa durante l’esecuzione
  • 29. 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 righen”; 1 2 3 4 5 6 7 8 9 10 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 :)
  • 30. 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
  • 31. 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 Inizializzo il contatore
  • 32. 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 Eseguo fintanto che questa condizione è VERA
  • 33. 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 Eseguo questa operazione AD OGNI CICLO (ovvero incremento il contatore)
  • 34. 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 Eseguo questa operazione AD OGNI CICLO (ovvero incremento il contatore)
  • 35. 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
  • 36. 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 “ -> $elementon”;
 }
  • 37. Ultimo ciclo: foreach • ripeti un blocco di codice per ciascun elemento di un array! • Proviamo con:
 
 @lista = (‘ciao’, ‘mondo’, ‘crudele’);
 foreach $elemento (@lista) {
 print “ - $elementon”;
 }" • In italiano vuol dire scorri l’array e ad ogni ciclo metti l’elemento corrente dentro una comoda variabile.
  • 38. Un po’ di funzioni
  • 39. 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)
  • 40. 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 biscottin”;"
  • 41. 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 quadraton”;
 
 $area = 1000; 
 $lato = sqrt($area);" ! print “ Area: $area cm2
 Lato: $lato cmn”;
  • 42. 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 dadin”;" ! $num_dadi = 20;" for ($i=1; $i<=$num_dadi; $i++) {" $valore = int(rand(6))+1;" print “Dado n. $i: $valoren”;" }" ! print “Ho finito.n”;
  • 43. 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 messaggi
 print O “Stampa sul file…”; #vedi oltre
  • 44. ancora su print • Abituatevi fin da subito a usare
 print STDERR “Messaggion”;
 per i messaggi informativi! • E usare 
 print “Valori e risultati…n”;
 per l’output vero e proprio del programma
  • 45. 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 biscottin”;" $tondo = int($bps);" print “Intero = $tondon”;"
  • 46. 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 biscottin”;" $tondo = int($bps);" print “Intero = $tondon”;"
  • 47. 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

  • 48. Un primo esempio $sequenza = ‘ACGATCGTACGTAGCTGACTGATCGTACGTAACGTACGTAGCT GACTGATCGATCGTAGCTAGCAGCTGATCGACTGACTGACTGAT CGATCGTACGTAGCTAGCTGACTGATC’;" $lunghezza = length($sequenza);
 $lunghezza_read = 12;
 $posizione = int(rand($lunghezza - $lunghezza_read);
 $seq = substr($sequenza, $posizione, $lunghezza_read);
 print “>Randomn$seqn”;
  • 49. 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”;
  • 50. 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”;

  • 51. 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, “; ”);

  • 52. 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);
  • 53. 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) {
 …
 }
  • 54. 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)
  • 55. 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”;

  • 56. 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)
  • 57. “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?
  • 58. 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)!
  • 59. 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 “$rigan”;
 }
 print STDERR “Ho finito di leggere il file: ha $c righe totali. n”;
  • 60. 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 “$rigan”;
 }
 print STDERR “Ho finito di leggere il file: ha $c righe totali.n”;
  • 61. 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/;
  • 62. 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”;
 }

  • 63. 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