View
212
Download
0
Category
Preview:
Citation preview
BIOINFO3 - Lezione 26 11
ESERCIZIOESERCIZIO
Esercizio. Leggere delle sequenze di DNA (una per riga, a partire da inizio riga) e stampare solo le sequenze lunghe più di 20 basi.
Versione compatta
BIOINFO3 - Lezione 26 22
ESERCIZIOESERCIZIO
Esercizio. Leggere in redirezione un file di sequenze di DNA (una per riga, a partire da inizio riga) e stampare la lunghezza minima, massima e media delle sequenze.
Versione compatta
BIOINFO3 - Lezione 26 33
DEBUGGERDEBUGGER
Il Perl offre la possibilità di osservare passo per passo l’esecuzione dei propri programmi per verificarne la correttezza e scoprirne eventuali errori “di progettazione”. Si tratta di richiederne l’esecuzione mediante un DEBUGGER
Il debugger si può attivare in due modi diversi:
•perl –d nomeprogramma
•aggiungendo nella prima riga del programma (quella con #!/usr/bin/perl) l’opzione -d
Una volta all’interno del debugger si possono usare i comandi
h help-per vedere l’elenco dei comandi
q quit-per uscire dal debugger
s step-per eseguire l’istruzione corrente (basta darlo la prima volta, per poi proseguire con il tasto di INVIO)
p print-per stampare il valore di una variabile
BIOINFO3 - Lezione 26 44
OPERAZIONI SUI FILEOPERAZIONI SUI FILE
Perl permette di leggere o scrivere direttamente su un file, anche senza utilizzare la redirezione.
Abbiamo visto che la redirezione opera al di fuori del programma cambiandone l’input e/o l’output e che ciò è completamente trasparente al programma il quale crede comunque di leggere da STDIN e scrivere su STDOUT.
programma <file-input >file-output
programma
ST
DIN
ST
DO
UT
file-input file-output
BIOINFO3 - Lezione 26 55
HANDLEHANDLE
STDIN e STDOUT sono delle handle, cioè delle variabili particolari (il cui nome non inizia per $) che fanno riferimento ad un file. Nelle operazioni di input di una riga < > e di print normalmente si specifica l’handle con cui effettuare l’operazione.
<HANDLE1> input dal file associato all’handle HANDLE1
print HANDLE2 “…”; output sul file associato all’handle HANDLE2
N.B. HANDLE1 e HANDLE2 indicano 2 nomi generici di handle ad as. I, O, A, PIPPO, FILE_INPUT, FILE_OUTPUT
Se non è specificata alcuna handle (come abbiamo sempre fatto sinora!) l’input avviene da STDIN e l’output su STDOUT
< > è equivalente a <STDIN>
print “…”; è equivalente a print STDOUT “…..”;
BIOINFO3 - Lezione 26 66
HANDLEHANDLE
Il seguente schema esemplifica in generale gli input e output di un programma
programma
ST
DIN
ST
DO
UT
file-input file-output
HANDLE1
HANDLE2
file2
file1
? ?
BIOINFO3 - Lezione 26 77
APERTURA DEL FILEAPERTURA DEL FILE
Per poter scrivere o leggere un file è innanzitutto necessario aprirlo ed associarlo ad una handle. Dopodichè in ogni operazione di input o print relativa a quel file si dovrà fare riferimento a quella handle.
open (I,”pippo”);
open (I,”<pippo”);
Apre il file di nome ‘pippo’ in lettura, associandolo alla handle di nome I. Se il file non esiste l’istruzione restituisce il valore falso (0)
open (O,”>pluto”);
Apre il file di nome ‘pluto’ in scrittura, associandolo alla handle di nome O. Se il file non esiste viene creato, se esiste già esso viene sovrascritto
open (A,”>>topolino”);
Apre il file di nome ‘topolino’ in scrittura, associandolo alla handle di nome A. Se il file non esiste viene creato, se esiste già lo si scriverà in coda alla parte già esistente
BIOINFO3 - Lezione 26 88
APERTURA DEL FILEAPERTURA DEL FILE
Supponiamo di avere eseguito le tre istruzioni open:
open (I,”<pippo”);
open (O,”>pluto”);
open (A,”>>topolino”);
A questo punto è possibile:
Leggere dal file “pippo” usando la handle I
<I>Scrivere sul file “pluto” (svuotato, se già esistente)
print O “………”;Scrivere sul file “topolino” (in coda al file)
print A “………”;
programma
I O A
pippo
pluto
topolino
BIOINFO3 - Lezione 26 99
OUTPUTOUTPUT
Esempi di istruzioni print su differenti handle.
Notare l’effetto dei due differenti tipi di open in scrittura sui file nomi1 e nomi2
PRIMA
DOPO
BIOINFO3 - Lezione 26 1010
INPUTINPUT
Esempio.
Programma che riceve come argomento (nella linea di comando) il nome del file da aprire. Se il file esiste ne legge le righe e le stampa.
Notare l’or (||). Solo se falsa la open (ovvero file non apribile: non esiste o non si ha il diritto di leggerlo) si esegue il comando die
Vedremo ora alcuni esempi di esecuzione
BIOINFO3 - Lezione 26 1111
INPUTINPUT
Esempi di esecuzione.
Nel primo caso l’array @ARGV è vuoto (nessun argomento).
Quindi @ARGV in un contesto scalare (@ARGV!=1) vale 0 e @ARGV!=1 è falsa. Viene eseguita subito l’istruzione die che fa terminare il programma
E’ chiaro il concetto di contesto scalare o contesto array?
Ad esempio:
@a+1
@a==1
@b=@a
@a>0
($a,@b)=@a
($a,$b)=@a
BIOINFO3 - Lezione 26 1212
INPUTINPUTEsempi di esecuzione.
Nel secondo caso si passa un solo argomento: “nomi”.
Quindi @ARGV=(“nomi”) e @ARGV in un contesto scalare ora vale 1. Il die non è eseguito perché la condizione dell’if ora è falsa
$file=$ARGV[0]=“nomi”
Si apre il file “nomi” ($file=“nomi”) in lettura associandolo alla handle F
Si iniziano a leggere le righe del file “nomi”.
Nel primo ciclo $r=“Marta\n”;
Nel secondo $r=“Anna\n”;
…….
Fatti 6 cicli $r=<F> diventa falso perché arrivati a fine file
BIOINFO3 - Lezione 26 1313
RIEPILOGORIEPILOGO
•Debugger
•Input e output su file
Recommended