SlideShare a Scribd company logo
1 of 32
Download to read offline
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

More Related Content

What's hot

Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++Majong DevJfu
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: FunzioniMajong DevJfu
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimentiMajong DevJfu
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturatiMajong DevJfu
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del CodiceMajong DevJfu
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 

What's hot (20)

Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Gcc & Make
Gcc & MakeGcc & Make
Gcc & Make
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
2008 python
2008 python2008 python
2008 python
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
2006 Py04 avanzato
2006 Py04 avanzato2006 Py04 avanzato
2006 Py04 avanzato
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 

Similar to Pe t2 perl-caratteristiche

Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N AriAlartzero
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Data mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggettiData mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggettiStudiabo
 
Strutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStrutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStudiabo
 

Similar to Pe t2 perl-caratteristiche (12)

Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
Il simulatore NS-2
Il simulatore NS-2Il simulatore NS-2
Il simulatore NS-2
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N Ari
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
 
Data mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggettiData mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggetti
 
Strutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStrutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggetti
 
Template
TemplateTemplate
Template
 
T6 codice
T6 codiceT6 codice
T6 codice
 
R Vectors
R VectorsR Vectors
R Vectors
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 

More from Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 

More from Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

Pe t2 perl-caratteristiche

  • 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