Pe t2 perl-caratteristiche

32
Parte 2 Caratteristiche del Perl Linguaggi dinamici – A.A. 2009/2010 1

Transcript of Pe t2 perl-caratteristiche

Page 1: Pe t2 perl-caratteristiche

Parte 2

Caratteristiche del Perl

Linguaggi dinamici – A.A. 2009/20101

Page 2: Pe t2 perl-caratteristiche

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

Page 3: Pe t2 perl-caratteristiche

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

Page 4: Pe t2 perl-caratteristiche

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

Page 5: Pe t2 perl-caratteristiche

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

Page 6: Pe t2 perl-caratteristiche

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

Page 7: Pe t2 perl-caratteristiche

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

Page 8: Pe t2 perl-caratteristiche

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

Page 9: Pe t2 perl-caratteristiche

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)

Page 10: Pe t2 perl-caratteristiche

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

Page 11: Pe t2 perl-caratteristiche

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

Page 12: Pe t2 perl-caratteristiche

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

Page 13: Pe t2 perl-caratteristiche

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;

Page 14: Pe t2 perl-caratteristiche

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

Page 15: Pe t2 perl-caratteristiche

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

Page 16: Pe t2 perl-caratteristiche

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

Page 17: Pe t2 perl-caratteristiche

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

Page 18: Pe t2 perl-caratteristiche

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

Page 19: Pe t2 perl-caratteristiche

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}/

Page 20: Pe t2 perl-caratteristiche

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

Page 21: Pe t2 perl-caratteristiche

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

Page 22: Pe t2 perl-caratteristiche

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

Page 23: Pe t2 perl-caratteristiche

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

Page 24: Pe t2 perl-caratteristiche

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

Page 25: Pe t2 perl-caratteristiche

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

Page 26: Pe t2 perl-caratteristiche

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

Page 27: Pe t2 perl-caratteristiche

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

Page 28: Pe t2 perl-caratteristiche

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

Page 29: Pe t2 perl-caratteristiche

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

Page 30: Pe t2 perl-caratteristiche

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

Page 31: Pe t2 perl-caratteristiche

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

Page 32: Pe t2 perl-caratteristiche

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