970 likes | 1.12k Views
Bioinformatica Linguaggio Perl (1). Dr. Giuseppe Pigola – pigola@dmi.unict.it Dr. Alessandro Laganà – lagana@dmi.unict.it. Cos’è PERL?. PERL ( Practical Extraction and Report Language ) è un linguaggio di programmazione interpretato General Purpose.
E N D
BioinformaticaLinguaggio Perl (1) Dr. Giuseppe Pigola – pigola@dmi.unict.it Dr. Alessandro Laganà – lagana@dmi.unict.it
Cos’è PERL? • PERL (Practical Extraction and Report Language) è un linguaggio di programmazione interpretato General Purpose. • Viene usato in ogni settore come linguaggio colla, cioè adatto ad unire vari elementi. • Scrivere un Database, un foglio elettronico, un Sistema Operativo o un server Web completo in PERL sarebbe possibile ma praticamente inutile. • La funzione principale di PERL è invece unire i vari elementi. Bioinformatica
PERL linguaggio colla • PERL può prendere un database, convertirlo in un file adatto per un foglio elettronico e, durante l’elaborazione, correggere i dati. • PERL è anche in grado di prendere i documenti di un elaboratore di testi e convertirli nel formato HTML per la visualizzazione sul Web. • Essendo un linguaggio mirato ad unire gli elementi, PERL si adatta facilmente alle varie situazioni. Ha uno stile di programmazione molto flessibile e quindi è possibile eseguire la stessa operazione in più modi. Bioinformatica
Link e Risorse • Sito ufficiale: • http://www.perl.org/ • Sito Italiano: • http://www.perl.it/ • Active Perl: • http://www.activestate.com/ Bioinformatica
Il primo programma PERL • Una volta digitato il programma nell’editor di testo, lo salviamo come hello. Non è necessario aggiungere l’estensione del file, anche se PERL consente di farlo. Le estensioni più comuni sono .pl o .plx. • Per eseguire il programma è necessario aprire la finestra Prompt dei comandi, possibilmente nella directory in cui è stato salvato hello.pl. #!/usr/bin/perl print “Hello, World!\n”; Bioinformatica
PERL passo per passo • Per PERL tutto ciò che appare dopo il simbolo # è un commento. Il simbolo #! sulla prima riga di un programma è diversa in alcuni casi: il nome di percorso che segue fa riferimento al percorso dell’interprete PERL: • #!/usr/bin/perl • Se un file UNIX inizia con il simbolo #! seguito dal percorso di un interprete, UNIX sa che si tratta di un programma e sa anche come interpretarlo. Lo stesso vale per alcuni server Web, tra cui APACHE; #!/usr/bin/perl use strict; # Forza la dichiarazione di variabili use warning; # Forza l’inizializzazione di variabili, controlla deprecated; Bioinformatica
PERL, linguaggio a forma libera • PERL è noto come linguaggio di programmazione a forma libera; ciò significa che le istruzioni di PERL non sono esigenti sul modo in cui sono scritte. In un’istruzione PERL è possibile inserire spazi, tabulazioni, ritorni a capo, senza problemi (a meno che non vengano spezzate delle parole chiave): #!/usr/bin/perl print “Hello, World!\n” ; Bioinformatica
Unità di base di PERL:numeri e stringhe • In PERL, i numeri e le stringhe sono le unità di base e prendono il nome di scalari. • Così come in altri linguaggi di programmazione, in PERL esistono scalari costanti (o letterali) e scalari variabili. Bioinformatica
I letterali numerici • PERL offre due tipi diversi di costanti scalari di nome letterali: i letterali numerici e i letterali stringa. • I letterali numerici sono numeri e PERL consente di scrivere i numeri in diversi modi: Bioinformatica
I letterali stringa • In PERL i letterali stringa sono sequenze di caratteri, come Hello, World. E’ necessario racchiudere le stringhe letterali in apici, singoli ‘ ‘ o doppi “ “: • Gli apici all’interno delle stringhe devono essere preceduti dal simbolo di backslash \. “foo!” ‘Fourscore and seven years ago’ “” “Then I said to him, \”Go ahead!\”” ‘The doctor\’s stethoscope was cold.’ Bioinformatica
I letterali stringa (2) • La differenza principale tra le stringhe con doppi apici “ “ e quelle con apici singoli ‘ ‘ è che queste ultime sono letterali. • Ogni carattere in una stringa con apici singoli significa esattamente tale carattere. • D’altra parte, in una stringa con doppi apici, PERL controlla se sono presenti nomi di variabili o sequenze di escape e li traduce se li trova. • Le sequenze di escape sono stringhe speciali che consentono di incorporare caratteri nelle stringhe quando la digitazione degli stessi causerebbero problemi. Bioinformatica
Alcune sequenze di escape Bioinformatica
Operatori q e qq (Delimitatori) • Oltre agli apici PERL offre gli operatori qq e q. Per usare qq si può racchiudere il letterale stringa in qq( ) al posto degli apici: • E’ possibile usare l’operatore q al posto degli apici singoli per racchiudere il testo: qq(I said, “Go then,” and he said “I’m gone”) q(Tom’s kite wedged in Sue’s tree) Bioinformatica
Operatori q e qq (2) • Al posto delle parentesi si può usare qualsiasi altro carattere non alfabetico e non numerico per delimitare una stringa: • Il carattere da usare come delimitatore deve comparire subito dopo l’operatore q o qq. • Se si usa una coppia di caratteri ( ), <>,{ } o [ ] come delimitatori, dovranno essere nidificati appropriatamente: • Tuttavia questo metodo non rende i programmi molto leggibili, per cui conviene scegliere delimitatori che non appaiono nella stringa: q/Tom’s kite wedged in Sue’s tree/ q,Tom’s kite wedged in Sue’s tree, q(Joe (Tom’s dad) fell out of a (rather large) tree.); Q[Joe (Tom’s dad) fell out of a (rather large) tree.]; Bioinformatica
Variabili scalari • Per memorizzare dati scalari in PERL è necessario usare una variabile scalare. In PERL le variabili scalari sono indicate con il simbolo del dollaro ($ - Identificatore del tipo) seguito dal nome della variabile: $a $total $Date $serial_number $cat450 Bioinformatica
Variabili scalari (2) • Gli altri tipi di variabili (hash e array) usano un identificatore diverso o addirittura nessun identificatore (filehandle). • I nomi delle variabili in PERL, siano esse hash, array, filehandle o scalari, devono essere conformi alle regole seguenti: • Possono contenere caratteri alfabetici (a-z, A-Z), numeri o caratteri di sottolineatura (_) dopo l’identificatore del tipo. Tuttavia il primo carattere del nome non può essere un numero. • I nomi delle variabili sono sensibili alle maiuscole/minuscole Bioinformatica
Variabili scalari (3) • PERL riserva per sé stesso nomi di variabili di un solo carattere che non iniziano con un carattere alfabetico o di sottolineatura. Le variabili come $_, $”, $/, $2 e $$ sono variabili speciali la cui funzione sarà spiegata in seguito. • Le variabili scalari in PERL non devono essere dichiarate o inizializzate prima di poterle usare. • Per creare una variabile scalare è sufficiente usarla. PERL usa un valore predefinito quando una variabile non è inizializzata. Se è usata come numero PERL userà il valore 0, se è usata come stringa PERL userà la stringa vuota “”. Bioinformatica
La variabile speciale $_ • PERL dispone di una variabile speciale $_ il cui valore è usato come “predefinito” da molti operatori e funzioni. • Per esempio se si digita print senza specificare una variabile scalare o un letterale stringa da stampare, PERL stamperà il valore corrente di $_: $_=“Dark Side of the Moon” print; # Stampa il valore di $_ Bioinformatica
Espressioni • Un semplice programma PERL: • Un’espressione (in rosso) in PERL è semplicemente qualcosa con un valore. • Per esempio 2 è un’espressione valida. • I valori delle espressioni sono calcolati all’esecuzione del programma. #!/usr/bin/perl –w $radius=50; $area=3.14159*($radius ** 2); print $area Bioinformatica
Operatori: Assegnazione • L’operatore di assegnazione = prende il valore a destra e lo inserisce nella variabile a sinistra: • L’operando di sinistra deve essere qualcosa a cui può essere assegnato un valore. L’operando a destra può essere qualsiasi tipo di espressione. L’intera assegnazione è un’espressione: $title=“Gone with the wind”; $pi=3.14159; $a=$b=$c=97; $count=$count+1; Bioinformatica
Operatori numerici Bioinformatica
Operatori stringa • Concatenazione: • Interpolazione di variabili: $a=“Hello, World!”; $b=“Nice to meet you”; $c=$a . $b; $name=“John”; print “I went to the store with $name.”; Bioinformatica
Operatori stringa (2) • L’interpolazione si può impedire usando gli apici singoli o facendo precedere l’identificatore della variabile da un backslash: • La concatenazione si può eseguire così: $name=“Ringo”; print ‘I used the variable $name’ print “I used the variable \$name” $fruit1=“apples”; $fruit2=“and oranges”; $bowl=“$fruit1 $fruit2”; Bioinformatica
Operatori stringa (3) • Se il nome di una variabile è seguito immediatamente da lettere, numeri o apici, PERL non sarà in grado di distinguere chiaramente dove finisce il nome della variabile e inizia il resto della stringa. In questo caso si possono usare parentesi graffe { } attorno al nome della variabile: $date=“Thurs”; Print “I went to the fair on ${date}day”; $name=“Bob”; Print “This is ${name}’s house”; Bioinformatica
Operatori stringa (4) • x è l’operatore di ripetizione; prende due valori, una stringa da ripetere e il numero di volte da ripeterla: $line=“-” x 70; # Stampa 70 volte – e memorizza il risultato in $line Bioinformatica
Operatori unari • Operatori unari con simbolo: • Operatori unari con nome: -6; # 6 negativo -(-5); # 5 positivo Bioinformatica
Incremento e decremento $counter++; # incrementa la variabile counter $counter--; # decrementa la variabile counter $a=“c9”; $a++; print $a; # stampa d0 $a=“zzz”; $a++; print $a; # stampa aaaa Bioinformatica
Operatore angolare < > • Questo operatore è usato per leggere e scrivere file. La sua forma più semplice <STDIN> indica a PERL che una riga di input dovrebbe essere letta dal dispositivo di input (tastiera): • La riga di testo letta da <STDIN> include anche il carattere di nuova riga digitato premendo invio. E’ possibile rimuoverlo utilizzando la funzione chomp: print “What size is your shoe?”; $size=<STDIN>; print “Your shoe size is $size. Thank you!\n”; print “What size is your shoe?”; $size=<STDIN>; Chomp $size; print “Your shoe size is $size. Thank you!\n”; Bioinformatica
Altri operatori di assegnazione • La regola generale per creare un’assegnazione con un operatore è la seguente: • variabile operatore=espressione • Questa forma di assegnazione equivale a: • variabile=variabile operatore espressione • Ad esempio: $a=$a+3; $a+=3; # uguale alla riga precedente $line.=“, at the end” # accoda la stringa “, at…” a $line $t%=67; # divide $t per 67 e inserisce il resto in $t Bioinformatica
Considerazioni su stringhe e numeri • PERL consente spesso di usare numeri e stringhe in modo intercambiabile. Se un elemento ha l’aspetto di un numero PERL può usarlo come tale se ne ha bisogno: $a=42; # un numero print $a+18; # stampa 60 $b=“50”; # una stringa print $b-10; # stampa 40 Bioinformatica
Considerazioni su stringhe e numeri (2) • Allo stesso modo se un elemento ha l’aspetto di un numero, quando PERL necessita di una stringa può rappresentarlo come tale: • Se un elemento non ha l’aspetto di un numero ma viene usato dove era previsto l’uso di un numero PERL usa al suo posto il valore 0: $a=42/3; # un numero $a=$a . “Hello”; # usa un numero come stringa print $a; # stampa “14Hello” $a=“Hello, World!”; print $a+6; # visualizza il numero 6, la stringa vale 0 # PERL ci avvisa della circostanza se attiviamo –w sulla riga #! Bioinformatica
Controllare il flusso del programma • Blocchi di istruzioni; • Operatori; • Cicli; • Etichette; • Come uscire da PERL dopo l’esecuzione di un programma; Bioinformatica
Blocchi • Il metodo principale per raggruppare le istruzioni in PERL è rappresentato dai blocchi: { istruzione_a; istruzione_b; istruzione_c; } { istruzione_a; { istruzione_x; istruzione_y; } } Bioinformatica
L’istruzione if if (espressione) blocco if (espressione) blocco1 else blocco2 $r=<STDIN>; chomp $r; If ($r == 10) { print “$r is 10”; } else { print “$r is something other than 10…”; $r=10; print “$r has been set to 10”; } Bioinformatica
Elsif if (espressione1) blocco1 elsif (espressione2) blocco2 else blocco3 $r=<STDIN>; if ($r == 10) { print “$r is 10!”; } elsif ($r == 20) { print “$r is 20!”; } else { print “$r is neither 10 nor 20”; } Bioinformatica
Altri operatori relazionali Bioinformatica
Uso improprio degli operatori relazionali • Consideriamo il seguente esempio: • Dato che PERL si aspetta valori numerici, le stringhe vengono valutate 0, per cui l’espressione precedente è simile a $first=“Simon”; $last=“Simple”; if ($first == $last) { print “The words are the same!\n”; } if (0 == 0) Bioinformatica
Operatori relazionali per valori non numerici Bioinformatica
Significato di “vero” per PERL • Il numero 0 è falso; • La stringa vuota “” e la stringa “0” sono false; • Il valore non definito undef è falso; • Tutto il resto è vero. • Quando si verifica un’espressione per vedere se è vera o falsa questa viene semplificata, quindi viene convertita in un valore scalare per poter determinare se è vera o falsa. Bioinformatica
Operatori logici Bioinformatica
Circuito breve • La valutazione di un’espressione logica viene interrotta quando può essere determinata la verità (circuito breve): • In questo caso se $a o $b è falsa, deve essere valutata la parte destra dell’operatore or e il messaggio viene modificato. Se sia $a sia $b sono vere, l’operatore or deve essere vero e non è necessario valutare la parte destra. $message = “A e B sono entrambe vere.” ($a and $b) or $message=“A e B non sono entrambe vere” Bioinformatica
Ancora sugli operatori logici • Gli operatori logici di PERL non si limitano a restituire solo vero o falso. In realtà restituiscono l’ultimo valore valutato. • Per es. l’espressione 5 && 7 restituisce 7. • Se $old è vera l’espressione $new = $old è vera. Questo è più conciso di: $new=$old || “default” $new=$old; if (! $old) { $new=“default”; } Bioinformatica
Cicli while e for while (espressione) blocco $counter=0; while ($counter < 10) { print “Still counting…$counter\n”; $counter++; } For (inizializzazione; test; incremento) blocco for ($a=0; $a<10; $a=$a+2) { print “a is now $a\n”; } Bioinformatica
Disposizioni strane… • Le istruzioni if possono usare un altro tipo di sintassi. Se all’interno del blocco if c’è una sola espressione, questa può precedere le istruzioni if: • diventa: if (test_espressione) { espressione; } espressione if (test_espressione); $correct=1 if ($guess == $question); Print “No pi for you!” if ($ratio != 3.14159); Bioinformatica
Controllo più preciso • L’istruzione last permette di uscire dal blocco più interno del ciclo in esecuzione: while($i<15) { last if ($i==5); # il ciclo termina quando $i vale 5 $i++; } for($i=0; $i<100; $i++) { for($j=0; $j<100; $j++) { if ($i * $j == 140) { print “The product of $i and $j is 140\n”; last; } } } Bioinformatica
L’istruzione next • L’istruzione next riporta il controllo di nuovo nel ciclo e fa ricominciare l’iterazione successiva del ciclo, se questo non è stato completato. • L’istruzione redo è simile a next a eccezione del fatto che la condizione non viene rivalutata e PERL riprende l’esecuzione dall’inizio del blocco senza controllare se la condizione di fine è soddisfatta o no. for($i=0; $i<100; $i++) { next if (not $i % 2); print “An odd number=$i\n”; } Bioinformatica
Etichette • PERL consente di etichettare i blocchi e alcune istruzioni di ciclo (for, while): MIOBLOCCO: { } OUTER: while($expr) { INNER: while($expr) { statement; } } Bioinformatica
Etichette e last, redo, next • Le istruzioni last, redo e next possono prendere un’etichetta come argomento. Così è possibile uscire da un blocco specifico. Normalmente non sarebbe possibile terminare un ciclo esterno da un ciclo interno, a meno di ricorrere a complicazioni del codice. Invece… OUTER: for($i=0; $i<100; $i++) { for($j=0; $j<100; $j++) { if ($i * $j == 140) { print “The product of $i and $j is 140\n”; last OUTER; } } } Bioinformatica
Uscire da PERL • Quando PERL incontra un’istruzione exit, l’esecuzione del programma viene interrotta e PERL restituisce lo stato di uscita al sistema operativo. Uno stato di uscita 0 significa che tutto è andato bene: if ($user_response eq ‘quit’) { print “Good bye\n”; exit 0; } Bioinformatica
Liste • Quando si desidera fare riferimento a molti oggetti in PERL, vengono usati gli elenchi. Esistono tre modi per rappresentare gli elenchi: usando liste, array e hash; • Le liste rappresentano la forma più semplice di elenchi; una lista non è altro che un insieme di scalari; • Ogni scalare nella lista prende il nome di elemento della lista; • Le liste di PERL possono contenere qualsiasi numero di elementi scalari; Bioinformatica