1. Parte 2
Caratteristiche del Perl
Linguaggi dinamici – A.A. 2009/2010
1
2. Assegnamento a lista di più variabili
T Un meccanismo utilizzato frequentemente nel
linguaggio Perl è l'assegnamento multiplo di
l assegnamento
variabili tramite l'utilizzo di due liste
T Una lista elenca le variabili da inizializzare
T Una seconda lista (opzionale) specifica i valori
di inizializzazione
my ( $x, $y, $z ) = (1, 2, 3);
Linguaggi dinamici – A.A. 2009/2010
2
3. La variabile di default
T Una semplificazione introdotta nel Perl è la
possibilità di non definire una variabile per un
ciclo
T Ciascuna espressione prodotta in una
iterazione di un ciclo, se non espressamente
assegnata ad una variabile, viene associata
variabile
alla variabile speciale $_
foreach (@array) {
f h (@ )
print $_ . “n”;
}
Linguaggi dinamici – A.A. 2009/2010
3
4. Subroutine e funzioni
T Il Perl permette la definizione di subroutine e
funzioni tramite la parola chiave sub
T Lo scheletro generico di una funzione è il
seguente:
sub funzione {
<prelievo parametri>;
;
<definizione variabili locali>;
<statement;>
<ritorno risultato;>
}
Linguaggi dinamici – A.A. 2009/2010
4
5. Prelievo parametri funzione
T A ciascuna funzione è associato l'array degli
argomenti @
@_
T Tali argomenti possono:
T essere associati a variabili locali tramite un
i ti i bili l li t it
assegnamento multiplo
T essere prelevati uno per uno con la funzione
l i l f i
shift
T essere acceduti tramite la sintassi $_[]
Linguaggi dinamici – A.A. 2009/2010
5
6. Prelievo argomenti programma
T Analogamente, al programma è associato
l array
l'array degli argomenti @ARGV
T $ARGV[0]: primo argomento
T Il nome del programma è memorizzato nella
d l i t ll
variabile speciale $0
T Per una panoramica completa delle variabili
speciali a disposizione del linguaggio:
perldoc perlvar
Linguaggi dinamici – A.A. 2009/2010
6
7. Valore di ritorno di una funzione
T Il valore di ritorno è specificato tramite
l istruzione
l'istruzione return
T È possibile ritornare uno scalare oppure una
lista,
lista che saranno valutati nel contesto
richiesto
T Se
S non viene esplicitato lo statement di return,
i li it t l t t t t
il valore di ritorno è identificato in due passi
distinti
di ti ti
T Passo 1: se l'ultimo statement è una
espressione, essa diviene il valore di ritorno
T Passo 2: altrimenti, l'espressione ritornata è
quella nulla
Linguaggi dinamici – A.A. 2009/2010
7
8. Valore di ritorno di una funzione
T L'espressione ritornata dipende dal contesto
richiesto alla funzione stessa
T Contesto lista: @array=funzione()
T Contesto
C t t scalare: $
l $scalare=funzione()
l f i ()
T Contesto void (procedura): funzione()
T Non tenere conto di questo aspetto costituisce
una delle fonti primarie di errori!
Linguaggi dinamici – A.A. 2009/2010
8
9. Ordinamento liste
T La funzione builtin sort permette di ordinare
liste secondo un ordinamento ben specifico
T @sorted_array = sort { sort_func } @array;
T La f
L funzione di ordinamento è un semplice
i di t li
confronto lessicografico o numerico
T { $a <=> $b }: ordinamento alfanumerico
T { $a cmp $b }: ordinamento lessicografico
T Se non specificato altrimenti, l'ordinamento è
quello lessicografico
T La funzione builtin reverse prende in ingresso
un array e ritorna l'array invertito ( p
y y (il primo
elemento è l'ultimo, l'ultimo è il primo)
Linguaggi dinamici – A.A. 2009/2010
9
10. Suddivisione di liste
T La funzione builtin split permette di
suddividere una espressione (solitamente una
(solitamente,
stringa) in una lista di elementi, sulla base di
una espressione separatrice
p p
T @array = split / /, $string;
T Il primo argomento è una espressione regolare
che identifica il separatore nella stringa
T La stringa viene spezzata ogniqualvolta si
incontra un separatore
T Gli elementi risultanti sono inseriti nell'array
Linguaggi dinamici – A.A. 2009/2010
10
11. Apertura e chiusura di file
T Le funzioni builtin open e close gestiscono
l apertura
l'apertura e la chiusura di file tramite
descrittori (detti filehandle)
T open FILEHANDLE, MODE, EXPR: apre un file
FILEHANDLE MODE
identificato dall'espressione EXPR nella
modalità specificata da MODE, assegnando ad
esso il descrittore FILEHANDLE
T close FILEHANDLE: chiude il file riferito da
FILEHANDLE
T Un filehandle è una variabile oppure una
costante con nome in caratteri maiuscoli
Linguaggi dinamici – A.A. 2009/2010
11
12. Lettura da file
T L'operatore <FILEHANDLE> implementa la la
lettura bufferizzata di dati dal file referenziato
tramite FILEHANDLE
T A seconda del contesto utilizzato, possono
utilizzato
essere ritornati:
T una stringa scalare contenente il b ffer letto
na buffer
T un array di stringhe rappresentanti le righe del
file
fil
T Le stringhe contengono già un carattere di
ritorno a capo
T Rimozione ultimo carattere da una stringa:
g
funzione builtin chomp
Linguaggi dinamici – A.A. 2009/2010
12
13. STDIN, STDOUT, STDERR
T I tre descrittori di ingresso (STDIN), uscita
(OUTPUT),
(OUTPUT) errore (STDERR) standard associati
ad un processo sono accessibili tramite i
descrittori STDIN, STDOUT, STDERR
, ,
T Lettura da STDIN:
while(<STDIN>) {
my $buffer = $_;
}
T Scrittura su STDOUT, STDERR:
print STDOUT stringa;
print STDERR stringa;
Linguaggi dinamici – A.A. 2009/2010
13
14. Scrittura su file
T La funzione builtin print implementa la
scrittura bufferizzata su file
print FILEHANDLE string;
T L
La variante printf permette di scrivere stringhe
i t i tf tt i ti h
con un formato di stampa ben definito
(analogo della f i tf() d l C)
( l d ll fprintf() del
printf FILEHANDLE FORMAT string;
Linguaggi dinamici – A.A. 2009/2010
14
15. Cancellazione di file
T La funzione builtin unlink cancella uno o più
file
unlink “filename”;
unlink ( “file1”, “file2”);
li k “fil 1” “fil 2”)
T La procedura di cancellazione è quella
canonica dei filesystem UNIX
T Si scollega (unlink) un hard link al file
g ( )
T Se l'hard link è unico, si scollegano i metadati
del file dalle strutture del filesystem
y
Linguaggi dinamici – A.A. 2009/2010
15
16. Espressioni regolari
T Il Perl mette a disposizione un supporto molto
versatile per le espressioni regolari
T Per una introduzione completa, si legga:
perldoc perlretut
T Una espressione regolare del Perl è una
stringa contenuta fra due slash /
T Esempio: /pippo/ è l'espressione regolare che
intercetta la sottostringa “pippo”
i l i “ i ”
T È possibile specificare espressioni di tipo wild
card, in grado di rappresentare intere classi di
sequenze di caratteri
Linguaggi dinamici – A.A. 2009/2010
16
17. Wild card
T Wild card permesse:
T .: match di un qualunque carattere
:
T w: match di un carattere di tipo “parola”
(alfanumerico oppure _)
( lf i )
T s: match di un carattere di tipo “spazio bianco”
(spazio, tab)
( i t b)
T d: match di un digit (da 0 a 9)
T t: match di un carattere tab
T n: match di un carattere newline
T 0nn: match di un numero ottale nn
T xnn: match di un numero esadecimale nn
Linguaggi dinamici – A.A. 2009/2010
17
18. Wild card
T Wild card di negazione: iniziano con il
carattere maiuscolo
T W: match di un carattere che NON sia di tipo
parola
T S: match di un carattere che NON sia di tipo
“spazio bianco”
spazio bianco
T D: match di un carattere che NON sia un digit
Linguaggi dinamici – A.A. 2009/2010
18
19. Operatori di ripetizione
T Ciascun carattere, wild card o sequenza di
caratteri può essere seguita da una ripetizione
T La ripetizione indica quante volte è permessa
una sequenza, affinché il matching sia valido
sequenza
T *: match 0 o più volte
T +: match 1 o più volte
T ?: match 0 o 1 volte
T {n}: match n volte
T {n,}: match almeno n volte
T {n,m}: match almeno n, al massimo m volte
/S{1,8}.S{0,3}/
/S{1 8} S{0 3}/
Linguaggi dinamici – A.A. 2009/2010
19
20. Operatori di posizione
T Gli operatori di posizione specificano in quale
posizione di una riga ci si trova
T ^: inizio riga
T $: fine i
$ fi riga
Linguaggi dinamici – A.A. 2009/2010
20
21. Raggruppamento
T È possibile specificare un raggruppamento di
espressioni regolari
T Un raggruppamento è un elenco di
espressioni,
espressioni separate dal carattere | e
racchiuse fra parentesi tonde ()
T Esempio:(a|b|c)
E i ( |b| )
T Tale espressione fa match con uno qualunque
dei componenti interni (a, b o c)
Linguaggi dinamici – A.A. 2009/2010
21
22. Classi di caratteri
T Alcuni raggruppamenti possono essere tediosi
da scrivere
T Es.: le lettere dell'alfabeto (a|b|c|...|z)
T Per
P semplificare la notazioni, si introducono le
lifi l t i i ii t d l
classi di equivalenza
T Una classe di equivalenza specifica un gruppo
di caratteri; essa è rappresentata da una o più
sequenze racchiuse fra parentesi quadre []
T [a-zA-Z]: l'insieme delle lettere dell'alfabeto,
minuscole e maiuscole
T [ ]
[0-9]: l'insieme dei digit decimali
g
Linguaggi dinamici – A.A. 2009/2010
22
23. Sostituzione
T L'espressione regolare serve non solo ad
identificare sottostringhe bensì anche a
sottostringhe,
sostituirle
T In tal caso la notazione delle espressioni
caso,
regolari si presenta nella sua forma più
generale
T s/regexp1/regexp2/modalità
T s: operatore di sostituzione
t tit i
T regexp1: espressione regolare per il matching
T regexp2: espressione regolare per la
sostituzione
T modalità: modalità operativa
Linguaggi dinamici – A.A. 2009/2010
23
24. Sostituzione
T La modalità operativa è espressa tramite una
sequenza di caratteri fra i seguenti
T g: sostituisce ogni istanza trovata nella riga
(non solo la prima)
T i: il matching è case insensitive
T Esempio:
E i
T s/^Nome1/Nome2/g
Linguaggi dinamici – A.A. 2009/2010
24
25. Manipolazione di stringhe
T L'operatore =~ verifica il matching di una
stringa con una espressione regolare
T Se una stringa verifica l'espressione, viene
ritornato 1
T Altrimenti, viene ritornato 0
T L'operatore ! verifica il non matching di una
L' t !~ ifi t hi
stringa con una espressione regolare
T Se una stringa NON verifica l'espressione, viene
ritornato 1
T Altrimenti, viene ritornato 0
Linguaggi dinamici – A.A. 2009/2010
25
26. Assegnamento di matching
T È possibile associare parti di un matching ad
una variabile
T Esempio: si voglia intercettare una sequenza
di numeri arbitraria in una riga e si voglia
riga,
memorizzare il numero intercettato in una
variabile
T Si scrive l'espressione regolare relativa:
/^[0-9]+$/
/^[0 9] $/
T Si mettono delle parentesi tonde () intorno al
contenuto da intercettare: /^([0-9]+)$/
T Si invoca il matching con l'operatore =~
g p
Linguaggi dinamici – A.A. 2009/2010
26
27. Assegnamento di matching
T Dopo il matching, nelle variabili speciali $1, $2,
..., $9 sono presenti le stringhe che hanno
verificato il matching della prima, della
seconda, ..., della nona coppia di parentesi
, , pp p
T Nel nostro caso, se il matching ha avuto
esito positivo $1 assume il valore del
positivo,
numero
T Si assegna $1 ad una variabile: $var = $1;
Linguaggi dinamici – A.A. 2009/2010
27
28. Strutture dati avanzate
T È possibile definire strutture dati complicate a
piacere
T Array di array
T Hash
H h di array
T Array di hash
T Hash di hash
T Per una introduzione completa, si rimanda a:
p ,
perldoc perldsc
Linguaggi dinamici – A.A. 2009/2010
28
29. Array di array
T Dichiarazione: si dichiara un array contenente
liste anonime
T Generazione:
T si inserisce nell'array una lista anonima
ii i ll' li t i
T si dereferenzia un elemento in un array e ci si
aggiungono elementi
i l i
T Accesso e stampa:
T si usa la notazione $array[index][index]
T si stampa l'array anonimo
l array
Linguaggi dinamici – A.A. 2009/2010
29
30. Hash di array
T Dichiarazione: si dichiara un hash contenente
liste anonime
T Generazione:
T si inserisce nell'hash una lista anonima
ii i ll'h h li t i
T si dereferenzia un elemento in un array e ci si
aggiungono elementi
i l i
T Accesso e stampa:
T si usa la notazione $hash{key}[index]
T si usa un ciclo sulla lista keys %hash
Linguaggi dinamici – A.A. 2009/2010
30
31. Array di hash
T Dichiarazione: si dichiara un array contenente
hash anonime
T Generazione:
T si inserisce nell'array una h h anonima
ii i ll' hash i
T si dereferenzia un elemento in un hash tramite
l'operatore di d
l' dereferenziazione -> e si aggiunge
f i i i i
un valore corrispettivo ad una chiave
T Accesso e stampa:
T si usa la notazione $array[index]{key}
T si dereferenzia l'elemento dell'array, si
estraggono le chiavi e si stampano i valori
gg p
Linguaggi dinamici – A.A. 2009/2010
31
32. Hash di hash
T Dichiarazione: si dichiara un hash contenente
hash anonime
T Generazione:
T si inserisce nell’hash una h h anonima
ii i ll’h h hash i
T si assegna un valore ad ogni chiave della hash
anonima tramite l'
i i l'operatore =>
T Accesso e stampa:
T si usa la notazione $hash{key}{key}
T si dereferenzia l'elemento dell'hash, si
l elemento dell hash,
estraggono le chiavi e si stampano i valori
Linguaggi dinamici – A.A. 2009/2010
32