jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
Presentazione divulgativa sul Progetto Microbioma Italiano tenuta in occasione del workshop sui microorganismi organizzato dalla SIP (Soc. Italiana Protistologia) a Pineto (TE), settembre 2016
jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
Presentazione divulgativa sul Progetto Microbioma Italiano tenuta in occasione del workshop sui microorganismi organizzato dalla SIP (Soc. Italiana Protistologia) a Pineto (TE), settembre 2016
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
Meetup del PHP User Group Milano con presentazione delle attività del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sarà anche un intervento di Enrico Zimuel sulle novità del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
A primer on microbial diversity: 16S Amplicons analysisAndrea Telatin
Approaches to describe and unravel the complexity of microbial communities using next generation sequencing: whole metagenome shotgun and 16S amplicon (metabarcoding). Metabarcoding is explained in greater detail.
Presented at the Dept. of Genetics - University of Leicester - 2018
Flash introduction to Qiime2 -- 16S Amplicon analysisAndrea Telatin
This document provides an overview of analyzing 16S rRNA gene amplicon sequencing data using Qiime2. It begins with an introduction to metabarcoding and using 16S rRNA for microbial community profiling. It then demonstrates the bioinformatics analysis workflow in Qiime2, including quality control, clustering sequences into OTUs, assigning taxonomy, and generating an OTU table with metadata. The document is intended as a training source to familiarize users with common analysis steps and biases or assumptions in 16S amplicon analysis.
First adventure within a shell - Andrea Telatin at Quadram InstituteAndrea Telatin
This document provides an overview of using the Linux shell for bioinformatics. It discusses logging into a remote server, understanding file paths, inspecting text files, and testing basic bioinformatics tools. The goals of the tutorial include logging into a remote server on day 1, understanding file locations on day 2, inspecting text files on day 3, and using basic bioinformatics tools on day 4. Key shell commands are explained like cd, ls, pwd, cp, mkdir, rmdir, rm, cat, head and tail. Concepts of redirection, piping, wildcards and tab completion are also covered.
PHP 7.0 new features (and new interpreter)Andrea Telatin
PHP 7.0 has been around for a while now, and it's less scary to upgrade. At the same time there is a relevant speed improvement from PHP 5.0 (yes, PHP 6.0 will never be released!) that makes the upgrade even more interesting.
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR GenomicsAndrea Telatin
Target enrichment is used to sequence many individuals on genes of interest to study diseases. Sequence alignments are stored in SAM/BAM formats and variants are stored in VCF format. The IGV program visualizes tracks including alignments. Annotation programs add information to variants like genes affected, consequence on protein, and frequency in databases. The document provides an example of a cardiomyopathy gene panel with 56 targeted genes and discusses the bioinformatic analysis steps of alignment, variant calling, and annotation.
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...Andrea Telatin
This document summarizes an introduction to bioinformatics training on Perl programming. It covers simulating shotgun sequencing using Perl, reading text files line by line in Perl, and parsing file formats like SAM. It also introduces key concepts in Perl like pattern matching using regular expressions, including metacharacters, quantifiers, character classes, alternatives, and capturing portions of patterns.
More Related Content
Similar to Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
Meetup del PHP User Group Milano con presentazione delle attività del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sarà anche un intervento di Enrico Zimuel sulle novità del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
A primer on microbial diversity: 16S Amplicons analysisAndrea Telatin
Approaches to describe and unravel the complexity of microbial communities using next generation sequencing: whole metagenome shotgun and 16S amplicon (metabarcoding). Metabarcoding is explained in greater detail.
Presented at the Dept. of Genetics - University of Leicester - 2018
Flash introduction to Qiime2 -- 16S Amplicon analysisAndrea Telatin
This document provides an overview of analyzing 16S rRNA gene amplicon sequencing data using Qiime2. It begins with an introduction to metabarcoding and using 16S rRNA for microbial community profiling. It then demonstrates the bioinformatics analysis workflow in Qiime2, including quality control, clustering sequences into OTUs, assigning taxonomy, and generating an OTU table with metadata. The document is intended as a training source to familiarize users with common analysis steps and biases or assumptions in 16S amplicon analysis.
First adventure within a shell - Andrea Telatin at Quadram InstituteAndrea Telatin
This document provides an overview of using the Linux shell for bioinformatics. It discusses logging into a remote server, understanding file paths, inspecting text files, and testing basic bioinformatics tools. The goals of the tutorial include logging into a remote server on day 1, understanding file locations on day 2, inspecting text files on day 3, and using basic bioinformatics tools on day 4. Key shell commands are explained like cd, ls, pwd, cp, mkdir, rmdir, rm, cat, head and tail. Concepts of redirection, piping, wildcards and tab completion are also covered.
PHP 7.0 new features (and new interpreter)Andrea Telatin
PHP 7.0 has been around for a while now, and it's less scary to upgrade. At the same time there is a relevant speed improvement from PHP 5.0 (yes, PHP 6.0 will never be released!) that makes the upgrade even more interesting.
Target Enrichment with NGS: Cardiomyopathy as a case study - BMR GenomicsAndrea Telatin
Target enrichment is used to sequence many individuals on genes of interest to study diseases. Sequence alignments are stored in SAM/BAM formats and variants are stored in VCF format. The IGV program visualizes tracks including alignments. Annotation programs add information to variants like genes affected, consequence on protein, and frequency in databases. The document provides an example of a cardiomyopathy gene panel with 56 targeted genes and discusses the bioinformatic analysis steps of alignment, variant calling, and annotation.
Bioinformatica: Leggere file con Perl, e introduzione alle espressioni regola...Andrea Telatin
This document summarizes an introduction to bioinformatics training on Perl programming. It covers simulating shotgun sequencing using Perl, reading text files line by line in Perl, and parsing file formats like SAM. It also introduces key concepts in Perl like pattern matching using regular expressions, including metacharacters, quantifiers, character classes, alternatives, and capturing portions of patterns.
Introduction to 16S Analysis with NGS - BMR GenomicsAndrea Telatin
This document provides an overview and primer on 16S amplicon sequencing and analysis for metagenomics. It discusses how 16S is a ubiquitous gene that can be used to compare microbial communities across samples, outlines common analysis steps like preprocessing, OTU picking, taxonomy assignment, and diversity metrics, and introduces two analysis tools - MEGAN and Qiime. Key advantages and limitations of the 16S amplicon approach are highlighted.
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);
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 “;”
}
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 “>”
!
!
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.
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