BIOINFO3 - Lezione 261 ESERCIZIO 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 262 ESERCIZIO 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 263 DEBUGGER Il Perl offre la possibilità di osservare passo per passo lesecuzione dei propri programmi per verificarne la correttezza e scoprirne eventuali errori di progettazione. Si tratta di richiederne lesecuzione 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) lopzione -d Una volta allinterno del debugger si possono usare i comandi hhelp-per vedere lelenco dei comandi qquit-per uscire dal debugger sstep-per eseguire listruzione corrente (basta darlo la prima volta, per poi proseguire con il tasto di INVIO) pprint-per stampare il valore di una variabile
BIOINFO3 - Lezione 264 OPERAZIONI 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 linput e/o loutput e che ciò è completamente trasparente al programma il quale crede comunque di leggere da STDIN e scrivere su STDOUT. programma file-output programma STDIN STDOUT file-input file-output
BIOINFO3 - Lezione 265 HANDLE 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 lhandle con cui effettuare loperazione. input dal file associato allhandle HANDLE 1 print HANDLE 2 …; output sul file associato allhandle HANDLE 2 N.B. HANDLE 1 e HANDLE 2 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!) linput avviene da STDIN e loutput su STDOUT è equivalente a print …; è equivalente aprint STDOUT …..;
BIOINFO3 - Lezione 266 HANDLE Il seguente schema esemplifica in generale gli input e output di un programma programma STDIN STDOUT file-input file-output HANDLE 1 HANDLE 2 file 2 file 1 ? ?
BIOINFO3 - Lezione 267 APERTURA 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 listruzione 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 268 APERTURA 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 Scrivere sul file pluto (svuotato, se già esistente) print O ………; Scrivere sul file topolino (in coda al file) print A ………; programma IOA pippo pluto topolino
BIOINFO3 - Lezione 269 OUTPUT Esempi di istruzioni print su differenti handle. Notare leffetto dei due differenti tipi di open in scrittura sui file nomi1 e nomi2 PRIMA DOPO
BIOINFO3 - Lezione 2610 INPUT 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 lor (||). 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 2611 INPUT Esempi di esecuzione. Nel primo caso è vuoto (nessun argomento). in un contesto scalare vale 0 è falsa. Viene eseguita subito listruzione die che fa terminare il programma E chiaro il concetto di contesto scalare o contesto array? @a>0
BIOINFO3 - Lezione 2612 INPUT Esempi di esecuzione. Nel secondo caso si passa un solo argomento: nomi. in un contesto scalare ora vale 1. Il die non è eseguito perché la condizione dellif 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= diventa falso perché arrivati a fine file
BIOINFO3 - Lezione 2613 RIEPILOGO Debugger Input e output su file