Parte 2




             Caratteristiche del Perl




Linguaggi dinamici – A.A. 2009/2010
                                        1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Pe t2 perl-caratteristiche

  • 1.
    Parte 2 Caratteristiche del Perl Linguaggi dinamici – A.A. 2009/2010 1
  • 2.
    Assegnamento a listadi 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 didefault 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 TIl 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 ritornodi 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 ritornodi 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 chiusuradi 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 TI 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 TLa 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 TLa 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