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 26
1
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 26
2
DEBUGGER
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
3
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 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
file-input
BIOINFO3 - Lezione 26
file-output
4
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 l’handle con cui
effettuare l’operazione.
<HANDLE1>
print HANDLE2 “…”;
input dal file associato all’handle HANDLE1
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
< >
print “…”;
BIOINFO3 - Lezione 26
è equivalente a <STDIN>
è equivalente a print STDOUT “…..”;
5
HANDLE
Il seguente schema esemplifica in generale gli input e output di un programma
file1
HANDLE1
programma
?
?
file-input
HANDLE2
file-output
file2
BIOINFO3 - Lezione 26
6
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 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
7
APERTURA DEL FILE
Supponiamo di avere eseguito le tre istruzioni open:
open (I,”<pippo”);
open (O,”>pluto”);
open (A,”>>topolino”);
programma
A questo punto è possibile:
I
O
A
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 “………”;
pippo
topolino
pluto
BIOINFO3 - Lezione 26
8
OUTPUT
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
9
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
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
10
INPUT
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
11
INPUT
Esempi di esecuzione.
Nel secondo caso
argomento: “nomi”.
si
passa
un
solo
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
12
RIEPILOGO
•Debugger
•Input e output su file
BIOINFO3 - Lezione 26
13
Scarica

Document