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