SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
LINGUAGGI DINAMICI
PARTE 2

IL LINGUAGGIO PERL

Linguaggi dinamici – A.A. 2009/2010
                                      1
Parte 2




                   Introduzione al Perl




Linguaggi dinamici – A.A. 2009/2010
                                          2
Un po’ di storia
T   PERL: acronimo di Practical Extraction Report
    Language
T   Nasce nel 1986, come un insieme di strumenti
    per la gestione della configurazione di un
    server USENET
T   Autore: L
    A t      Larry Wall
                   W ll
T   1987: V1.0
T   1999: V5.003 (milestone release)
T   2008: V5 10
           V5.10
T   Perl6 (radicalmente diverso da V5.10) è in fase
    di standardizzazione
Linguaggi dinamici – A.A. 2009/2010
                                                      3
Caratteristiche
T   Sintassi estremamente ricca e variegata
      T   Motto del Perl: “There is more than one way to
          do it” (TIMTOWTDI)
T   Supporto eccellente per la manipolazione di
    S       t      ll t      l       i l i
    testi (espressioni regolari del Perl)
T   Include diversi comandi di shell come builtin
T   Molto liberale nei costrutti e nella tipizzazione
                                           p
T   Archivio di moduli sconfinato (CPAN)
T   Portabile


Linguaggi dinamici – A.A. 2009/2010
                                                           4
Esecuzione
T   L'esecuzione avviene attraverso l'interprete
    perl,
    perl presente in forma pacchettizzata in tutte
    le distribuzioni di software moderne
      T   GNU/Linux (Debian): sudo apt-get install perl
      T   Windows: ActivePerl
T   Si esegue un programma passandolo come
                                 d l
    argomento all'interprete:
      T   perl filename
      T   perl -e ' statement '



Linguaggi dinamici – A.A. 2009/2010
                                                          5
Documentazione
T   Il Perl fornisce il proprio strumento di
    documentazione,
    documentazione analogo alle man page
T   Comando perldoc
    T   Debian: sudo apt-get install perl-doc
        D bi      d     t t i t ll      ld
    T   perldoc perltoc
T   Usi comuni:
    T   p
        perldoc argomento: invoca la man page di
                            g               p g
        argomento (deve essere un nome esatto)
      T perldoc -q parola chiave: ricerca la parola
                          q parola_chiave:
        chiave nelle FAQ
      T perldoc -f funzione: invoca la man page della
                          f
        funzione builtin
Linguaggi dinamici – A.A. 2009/2010
                                                        6
Blocchi di codice, statement, commenti
T   Il singolo statement è concluso da un carattere
    punto e virgola ;
      T   print( “Hello worldn” );
T   Il bl
       blocco di codice è delimitato da parentesi
                   di     d li it t d        t i
    graffe {}
      T   { print ( “Hello worldn” ); }
T   Forte analogia con il linguaggio C
T   Il carattere # rappresenta l'inizio di un
    commento



Linguaggi dinamici – A.A. 2009/2010
                                                      7
Scheletro di un programma Perl
#!/usr/bin/perl

<direttive pragma>
<direttive di importazione moduli esterni>
<blocco BEGIN>
 blocco BEGIN
<Sequenza di statement>
<blocco END>




Linguaggi dinamici – A.A. 2009/2010
                                             8
Direttive pragma
T   Una direttiva pragma è uno statement che
    importa uno dei moduli speciali del Perl
T   Tali moduli non arricchiscono le funzionalità
    offerte dal linguaggio bensì forniscono al
                linguaggio,
    compilatore/interprete informazioni sul
    programma stesso
T   Il formato di una direttiva pragma è il seguente:
      use modulo_speciale;
      T


T   “use” è una funzione builtin che importa le
    funzionalità di un modulo


Linguaggi dinamici – A.A. 2009/2010
                                                        9
Esempi di direttive pragma
T   use warnings: l'interprete stampa messaggi di
    avvertimento in caso di espressioni a rischio
      T   use warnings;
      T   Fa
          F un controllo locale, ad es. non ci avverte di
                     t ll l    l    d          i     t
          possibili problemi tra file diversi
      T   Per bilit
          P abilitare tutti i messaggi di avvertimento,
                       t tti            i        ti   t
          occorre invocare l'interprete con l'opzione -w




Linguaggi dinamici – A.A. 2009/2010
                                                            10
Esempi di direttive pragma
T   use strict: vieta usi “libertini” del codice,
    producendo errori a compile o a run time
      T   use strict;
      T   perldoc strict per maggiori informazioni
             ld     ti t         i ii f       i i
T   use diagnostics: strumento di debugging; in
    caso di errore a compile o a run time, stampa
    un messaggio di diagnostica che prova a
    spiegare l'accaduto
      T   use diagnostics;



Linguaggi dinamici – A.A. 2009/2010
                                                     11
Direttive di importazione moduli
T   Una direttiva di importazione moduli è uno
    statement che importa uno dei moduli del Perl
T   Tali moduli arricchiscono le funzionalità
    esterne offerte
      T   GUI, database, rete, processi, thread, file
T   Il formato di una direttiva di importazione è il
    seguente:
      Tuse Path::To::NameSpace::Module;
T   Il modulo è identificato dal suo nome completo
                                             p
    (inclusivo di namespace)


Linguaggi dinamici – A.A. 2009/2010
                                                        12
Blocchi BEGIN{}, END{}
T   In un programma possono essere specificati
    due blocchi di codice particolari, aventi nome
                          particolari
    BEGIN ed END rispettivamente
      T   Sintassi mutuata dal linguaggio AWK
T   BEGIN: compilato ed interpretato non appena il
    parser lo identifica
      T   Controllo di esistenza moduli a livello di
          compilazione
               il i
      T   Allocazione di risorse
T   END: interpretato all'uscita del programma
      T   Rilascio di risorse
Linguaggi dinamici – A.A. 2009/2010
                                                       13
Variabili
T   Il Perl definisce alcune categorie di variabili
      T   Scalari: contenitori semplici di una sola
          informazione (variabili semplici)
      T   Array: oggetti che possono contenere più di
          A            tti h               t        iù
          una informazione
      T   Hash: tabella
          H h t b ll associativa chiave => valore
                                i ti    hi   > l
      T   Reference: variabili che contengono un'altra
          variabile (puntatori opachi)
             i bil (      t t i      hi)
T   Assegnamento di variabili: operatore =



Linguaggi dinamici – A.A. 2009/2010
                                                         14
Variabili scalari
T   La variabile scalare (o, più semplicemente, uno
    scalare) rappresenta il tipo di dato più
    semplice in Perl
      T   Può contenere un solo valore (da cui il nome
                                                  nome,
          mutato dalla Fisica)
      T   Il valore può essere di un tipo qualunque, senza
                                          qualunque
          dichiarazione esplicita (dynamic typing)
            T Intero


            T Floating point


            T St i
              Stringa


Linguaggi dinamici – A.A. 2009/2010
                                                             15
Nomi delle variabili scalari
T   Tutte le variabili scalari cominciano con il
    simbolo $
T   Segue il nome vero e proprio, una
    combinazione arbitrariamente lunga di lettere,
                                            lettere
    digit ed underscore (_)
T   Esempi di nomi di variabile leciti:
    E       i       i       i bil l iti
      T   $foo
      T   $foo_blah
      T   $
          $x100y200z
               y
      T   $HiDave
      T   $Very_Descriptive_Name
          $Very Descriptive Name
Linguaggi dinamici – A.A. 2009/2010
                                                      16
Assegnamento scalare
T Si utilizza l'operatore =
$pi = 3.141593;
      3 141593;
$foo = “foo”;            Ricordatevi i punti e virgola
$Foo = 27;               al termine di ciascuno
                                      statement!




Linguaggi dinamici – A.A. 2009/2010
                                                         17
Costanti scalari
T   Le costanti scalari
    sono definite allo
    stesso modo del C
3
3.14159265
6.02E23
“foo”                                 Non iniziate le costanti
032                                   numeriche con un 0. Il Perl lo
                                      interpreta come una
0x1a                                  codifica ottale!



Linguaggi dinamici – A.A. 2009/2010
                                                                       18
Stringhe scalari (literals)
T   Le variabili scalari contenenti una stringa
    devono essere racchiuse fra singole quote ( ')
                                                (' )
    oppure fra doppie quote (“ ”)
T   Singole quote:
      T   La stringa viene considerata così com'è, senza
          alcun intervento dell'interprete
                           dell interprete
T   Doppie quote:
      T   L'interprete interviene nella costruzione della
          stringa
      T   È possibile utilizzare alcune sequenze speciali
      T   È possibile inserire risultati di espressioni
            p                                 p
Linguaggi dinamici – A.A. 2009/2010
                                                            19
Quote doppie e backslash
T   All'interno di una stringa con quote doppie, il
    carattere backslash () introduce le sequenze
    speciali
      T   n: newline
      T   r: carriage return
      T   t: tabulazione
          t t b l i
      T   : un singolo carattere backslash 
      T   ”: un singolo carattere di virgolette “




Linguaggi dinamici – A.A. 2009/2010
                                                      20
Esempi di stringhe
Espressione:                          Risultato visivo:
“Hellon”                             Hello             Newline
'Hellon'                             Hellon           No newline
“12t6t3”                            12 6 3
'12t6t3'
 12t6t3                             12t6t3
“He said ”Hi””                      He said ”Hi”
'He said ”Hi”’                      He said ”Hi”
'He said ”Hi”'                        He said ”Hi”



Linguaggi dinamici – A.A. 2009/2010
                                                                     21
Interpolazione di variabili
T All'interno di una stringa con quote doppie,
  una variabile scalare è interpolata – essa viene
  rimpiazzata dal suo valore
$num = 13;
$foo = “The number is $numn”;
print $foo;

The number is 13




Linguaggi dinamici – A.A. 2009/2010
                                                     22
Problemi legati all'interpolazione
T Si consideri il seguente frammento di codice
$num = 13; $number = 17;
$foo = “The number is $number”;
T Quale è il valore di $foo?


      T   "The number is 13ber"
      T   "The number is 17"
T   Il Perl disambigua questo caso considerando il
    nome di variabile più lungo possibile
      T   $foo
          $f : "Th number is 17"
               "The   b i


Linguaggi dinamici – A.A. 2009/2010
                                                     23
Disabilitare l'interpolazione
T   In certi casi, l'interpolazione deve essere
    disabilitata
      T   Stampa stringhe contenenti il nome di una
          variabile ( The number in $num is 13”)
                    (“The                   13 )
T   Si usa il backslash come operatore di escape
      T   Il backslash, posto di fronte ad un carattere
             b k l h             f        d
          speciale, ne annulla il significato speciale e lo
          rende un semplice carattere
      T   $foo = "The number in $num is $num";



Linguaggi dinamici – A.A. 2009/2010
                                                              24
Operatori stringa
T Il Perl mette a disposizione l'operatore di
  concatenazione di stringhe ( )(.)
T Esempi


$myname = "D
$            "Dave" . " " . "H lli
                    "       "Hollinger";
                                      "
$myname = $first . $blank . $last;




Linguaggi dinamici – A.A. 2009/2010
                                                25
Operatori stringa
T   Il Perl mette a disposizione l'operatore di
    ripetizione di stringhe (x)


     Espressione:                     Valore:
     “M” x 4
      M                               “MMMM”
                                       MMMM
     “Hello” x 2                      “HelloHello”
     “Joe” x (5 - 2)                  “JoeJoeJoe”




Linguaggi dinamici – A.A. 2009/2010
                                                     26
Operatori di confronto
T   Il Perl mette a disposizione operatori di
    confronto per i numeri e per le stringhe
T   Attenzione: non essendo il tipo di dato di uno
    scalare dichiarato esplicitamente l'interprete
                        esplicitamente, l interprete
    non è in grado di segnalare a tempo di
    compilazione se è usato l'operatore giusto
                               l operatore
T   Se si intende usare uno scalare in un dato
    modo (numero o stringa), bisogna invocare
        d (             ti    ) bi       i
    esplicitamente l'operatore di confronto adatto
T   Valori diversi da 0 sono considerati TRUE; il
    valore 0 è considerato FALSE
Linguaggi dinamici – A.A. 2009/2010
                                                       27
Operatori di confronto
            Confronto                 Operatore   Operatore
                                      Numerico     Stringa

       Uguale                            ==          eq
      Minore di                           <           lt
     Maggiore di                          >          gt
  Minore o uguale di
            g ale                        <=
                                         <           le
 Maggiore o uguale di                    >=          ge



Linguaggi dinamici – A.A. 2009/2010
                                                              28
Confronto fra stringhe
T   Il confronto fra stringhe è quello classico
    lessicografico
      T   Si estrae il primo carattere delle stringa
      T   Si calcolano i relativi codici ASCII
               l l         l ti i di i
      T   Si confrontano tali codici numerici
      T   Al numero più basso corrisponde la stringa
          minore
      T   Se i caratteri sono uguali, si procede con il
          secondo carattere, e così via



Linguaggi dinamici – A.A. 2009/2010
                                                          29
Conversione dei dati
T   A seconda del contesto utilizzato, l'interprete
    converte scalari in tipi di dato numero o
    stringa
      T   2 * “3 14” provoca una conversione di “3 14” in
               3.14                                 3.14
          numero float, poiché * è definito solo sui tipi di
          dato numerici
      T   (117 lt 23) converte i numeri 117 e 23 in
          stringhe,
          stringhe poiché l'operatore lt è definito solo sui
                             l operatore
          tipi di dato stringa
      T   $x == “POST” converte entrambe le variabili ad
                   POST
          un numero, poiché l'operatore == è definito solo
          sui tipi di dato numero
Linguaggi dinamici – A.A. 2009/2010
                                                               30
Conversione stringa : numero
T   È sufficiente che una stringa inizi con una
    rappresentazione valida di un numero perché
    una conversione stringa : intero possa aver
    luogo
     uogo
T   In un contesto numerico:
      T   “13.5Joe”
          “13 5Joe” viene convertito in 13.5
                                        13 5
      T   “Hello” viene convertito in 0
      T   “Joe13.5” viene convertito in 0




Linguaggi dinamici – A.A. 2009/2010
                                                  31
Operatori booleani
T   Gli operatori booleani hanno la stessa sintassi
    del linguaggio C
T   Operatore or logico ||:
      T   Se
          S il primo operando è diverso da 0, ritorna 1
                 i            d     di     d 0 it
      T   Altrimenti, ritorna 1 se il secondo operando è
          diverso da 0 e 0 se è uguale a 0
          di       d                   l
T   Operatore and logico &&:
      T   Se il primo operando è uguale a 0, ritorna 0
      T   Altrimenti, ritorna 1 se il secondo operando è
          diverso da 0 e 0 se è uguale a 0


Linguaggi dinamici – A.A. 2009/2010
                                                           32
Operatori booleani
T   Gli operatori booleani hanno la stessa sintassi
    del linguaggio C
T   Operatore or bit a bit |:
      T   Ritorna il risultato d ll' bit a bit
          Rit         i lt t dell'or
      T   1|4=5
T   Operatore and bit a bit &:
      T   Ritorna il risultato dell'and bit a bit
      T   1&3=1
T   Per ulteriori chiarimenti si consulti il manuale
                  chiarimenti,
    degli operatori del Perl: perldoc perlop

Linguaggi dinamici – A.A. 2009/2010
                                                       33
Operatori booleani
T   Gli operatori booleani hanno la stessa sintassi
    del linguaggio C
T   Operatore di negazione logica !:
      T   Ritorna il risultato d ll negazione logica
          Rit         i lt t della       i    l i
      T   0 diventa 1
      T   1 diventa 0
      T   q
          qualunque altro valore porta ad un risultato
                 q                  p
          indefinito




Linguaggi dinamici – A.A. 2009/2010
                                                         34
Array
T   La variabile array (o, più semplicemente, un
    array) rappresenta l'astrazione di una lista
                        l astrazione
      T   Può contenere più di un valore
      T   Il valore può essere di un tipo qualunque
                l      ò             ti      l
          scalare, senza dichiarazione esplicita (dynamic
          typing)
            T Intero


            T Fl
              Floating point
                   ti    i t
            T Stringa


            T Reference


      T   Un array non può contenere un altro array; ma
          può contenere un puntatore ad un altro array
Linguaggi dinamici – A.A. 2009/2010
                                                            35
Nomi delle variabili array
T   Tutte le variabili array cominciano con il
    simbolo @
T   Segue il nome vero e proprio, una
    combinazione arbitrariamente lunga di lettere,
                                            lettere
    digit ed underscore (_)
T   Esempi di nomi di variabile leciti:
    E       i       i       i bil l iti
      T   @wt
      T   @foo_blah
      T   @
          @x100y200z
               y
      T   @HiDave
      T   @Very_Descriptive_Name
          @Very Descriptive Name
Linguaggi dinamici – A.A. 2009/2010
                                                      36
Assegnazione array
T Si utilizza l'operatore =
@wt = (1, 2 3 4);
        (1 2, 3,
@wt = (1, “ciao”, 2);
T Attenzione: l'assegnazione di un array

  all'interno di un array è idempotente
      T   @wt = (1, (2, 3), 4); ha lo stesso significato di
          @
          @wt = ( , 2, 3, 4);
                (1, , , );




Linguaggi dinamici – A.A. 2009/2010
                                                              37
Accesso elementi di un array
T   Ciascun elemento di un array è una variabile
    scalare
T   Pertanto, un elemento di un array è
    identificato dal simbolo $ e non da @ (!)
                               $,
T   Per il resto, la sintassi è simile al C
      T   Gli indici di un array partono da 0
@
@wt = ( , 2, 3, 4);
       (1, , , );
print $wt[2];                         Stampa 3


T   Si possono usare indici negativi; -1 è l'ultimo
    elemento, -2 il penultimo, e così via
     l     t 2          lti         ì i
Linguaggi dinamici – A.A. 2009/2010
                                                      38
Array multidimensionali
T   Gli array multidimensionali sono dichiarati e
    gestiti come nel linguaggio C
T   Per specificare molteplici dimensioni, si
    usano altrettanti indici fra parentesi quadreIl
    gestore della memoria dell'interprete alloca
T   $x[7][4][3] 12;
    $ [7][4][3] = 12




Linguaggi dinamici – A.A. 2009/2010
                                                      39
Lista
T   Una lista è un contenitore di elementi fra
    parentesi tonde
      T   (1, 2, 3, 4) negli esempi precedenti
      T   @x (1, 2 3, 4);
          @ = (1 2, 3 4) assegna l lista (1, 2, 3, 4) alla
                                      la li t (1 2 3   ll
          variabile di tipo array x
T   L'uso più ovvio delle liste è nei cicli:
    L'     iù    i d ll li t        i i li
for $i ( (1, 2, 4) ) {
  print $i . “n”;
}



Linguaggi dinamici – A.A. 2009/2010
                                                             40
Array e code
T   L'array può essere gestito come una coda
T   Funzione builtin shift:
      T   shift @array: rimuove e ritorna il primo valore
          dell'array @array
T   Funzione builtin unshift:
      T   unshift @array, @list: inserisce la lista @list in
          cima alla variabile di tipo array @array, e ritorna il
          numero di elementi nell'array in caso di successo
      T   unshift @array, $scalar: inserisce lo scalare
          $scalar in cima alla variabile di tipo array @array, e
                                                       @array
          ritorna il numero di elementi nell'array in caso di
          successo
Linguaggi dinamici – A.A. 2009/2010
                                                                   41
Array e stack
T   L'array può essere gestito come uno stack
T   Funzione builtin push:
      T   push @array, @list: inserisce la lista @list in coda
          all'array @array e ritorna il numero di elementi
                    @array,
          nell'array in caso di successo
      T   push @array, $scalar: inserisce lo scalare $scalar
                 @array
          in coda all'array @array, e ritorna il numero di
          elementi nell'array in caso di successo
                            y
T   Funzione builtin pop:
      T   pop @array: rimuove e ritorna l ultimo
                                        l'ultimo
          elemento di @array

Linguaggi dinamici – A.A. 2009/2010
                                                                 42
Contesto scalare e lista
T   Una lista può essere valutata in due contesti
    diversi
      T   Scalare: l'operazione che coinvolge la lista
          produce come risultato uno scalare
      T   Lista: l'operazione che coinvolge la lista
          produce come risultato una lista o un array
T   Se si usa (inavvertitamente) una lista in un
    contesto scalare, il Perl non dà un messaggio
        t t       l      P l                     i
    di errore!
T   L'array viene trasformato in uno scalare con
    una operazione opportuna!
      T   Il numero di elementi dell'array
Linguaggi dinamici – A.A. 2009/2010
                                                         43
Contesti e polimorfismo
T   L'uso di diversi contesti (scalare, lista)
    permette di implementare una forma
    rudimentale di polimorfismo
T   Si può richiedere che una espressione ritorni
    un risultato scalare (funzione builtin scalar())
T   All'interno di una funzione, si può verificare
    All'i t             f     i      i ò     ifi
    se il risultato richiesto è un array oppure no
    (funzione b ilti wantarray())
    (f    i     builtin     t     ())




Linguaggi dinamici – A.A. 2009/2010
                                                       44
Slicing degli array
T Il Perl permette la gestione diretta di porzioni
  di array (slicing)
T Operatore di range ..: permette di specificare

  un intervallo contiguo di indici di un array
T Operatore di selezione ,: permette di

  specificare un i di b preciso di un array
        ifi        indice ben       i
T L'array su cui si effettua lo slicing è

  referenziato con il simbolo @, dal momento
  che il risultato delle operazioni è un array
@array_slice = @array_di_partenza[a..b];
@array_slice @array_di_partenza[a, b, c,
@array slice = @array di partenza[a b c d];
Linguaggi dinamici – A.A. 2009/2010
                                                     45
Hash
T   La variabile hash (o, più semplicemente, un
    hash) rappresenta l astrazione di una lista
                       l'astrazione
    associativa
      T   Può contenere più di un valore
      T   Il valore può essere di un tipo qualunque
          scalare,
          scalare senza dichiarazione esplicita (dynamic
          typing)
            T Intero


            T Floating point


            T St i
              Stringa
            T Reference




Linguaggi dinamici – A.A. 2009/2010
                                                           46
Nomi delle variabili hash
T   Tutte le variabili hash cominciano con il
    simbolo %
T   Segue il nome vero e proprio, una
    combinazione arbitrariamente lunga di lettere,
                                            lettere
    digit ed underscore (_)
T   Esempi di nomi di variabile leciti:
    E       i       i      i bil l iti
      T   %wt
      T   %foo_blah
      T   %x100y200z
               y
      T   %HiDave
      T   %Very_Descriptive_Name
          %Very Descriptive Name
Linguaggi dinamici – A.A. 2009/2010
                                                      47
Assegnamento hash
T Si utilizza l'operatore = per l'assegnamento
  dell hash
  dell'hash ad una variabile
T Si utilizza l'operatore => per associare

  stringhe letterali (dette chiavi) ai corrispettivi
  valori
%wt
% t = ( abc => 12, d f => “S Francisco” );
           b     12 defg     “San F       i   ”)
T Il contenuto della hash è una lista di elementi,

  che può quindi essere scritta come un array
T In quest'ultimo caso, le chiavi devono essere
      q                 ,
  racchiuse fra quote
%wt = ( “abc”, 12 “defg”, “San Francisco );
           abc 12, defg      San Francisco”
Linguaggi dinamici – A.A. 2009/2010
                                                       48
Accesso elementi di un hash
T   Ciascun elemento di un hash è una variabile
    scalare
T   Pertanto, un elemento di una hash è
    identificato dal simbolo $ e non da % (!)
                             $,
T   A differenza degli array, qui la chiave è
    racchiusa fra parentesi graffe
         hi    f        t i     ff

print $wt{abc} ;                      Stampa 12




Linguaggi dinamici – A.A. 2009/2010
                                                  49
Esistenza chiavi hash
T   Si utilizza la funzione builtin exists per
    controllare se una chiave esiste in un hash
      T   exists $wt{abc};
      T   Vuole i i
          V l in ingresso il contenuto puntato da una
                                 t     t     t t d
          chiave di un hash
      T   Ritorna 1 se l chiave esiste (anche se con un
          Rit           la hi      i t (   h
          valore undef)
      T   Ritorna 0 altrimenti
          Rit        lt i    ti
T   exists() funziona anche con gli array



Linguaggi dinamici – A.A. 2009/2010
                                                          50
Definizione chiavi hash
T   Si utilizza la funzione builtin defined per
    controllare se una chiave esiste ed è definita
    in un hash
      T   defined $wt{abc};
      T   Vuole in ingresso il contenuto puntato da una
          chiave di un hash
      T   Ritorna 1 se la chiave esiste ed ha un valore
          definito
      T   Ritorna 0 altrimenti
T   defined() funziona anche con gli array


Linguaggi dinamici – A.A. 2009/2010
                                                          51
Distruzione chiavi hash
T Si utilizza la funzione builtin delete per
  distruggere una chiave ed il suo contenuto
delete $wt{abc};
T d l t () funziona anche con gli array
  delete() f     i       h         li
T Se si cancella l'ultimo elemento dell'array,

  l'operazione è equivalente ad una pop
T Se si cancella un elemento interno, esso non
                                        ,
  viene rimosso, ma viene sostituito con undef
      T   Non appena si prova ad accederlo, il
          comportamento del programma diventa
          indefinito
Linguaggi dinamici – A.A. 2009/2010
                                                 52
Accesso a chiavi e valori
T   Sono messi a disposizione due metodi molto
    comodi per gestire in blocco l intero insieme
                                    l'intero
    delle chiavi e dei valori di un hash
T   keys (%hash):
      T   Ritorna un array contenente le chiavi dell'hash
      T   L'ordine non è definito a priori (non ci fate
           ' di          d fi i       i i(       if
          affidamento)
T   values (%hash):
      T   Ritorna un array contenente i valori dell'hash
      T   L'ordine non è definito a priori (non ci fate
          affidamento))
Linguaggi dinamici – A.A. 2009/2010
                                                            53
Slicing degli hash
T Il Perl permette la gestione diretta di porzioni
  di hash (slicing)
T L'operazione di range non avrebbe senso


T O
  Operatore di selezione , permette di
          t       l i              tt
  specificare un indice ben preciso di un hash
T L'hash su cui si effettua lo slicing è

  referenziato con il simbolo @, poiché si sta
  operando con un array di indici
@
@values = @hash{$key1, $ y , $ y , $ y };
            @      {$ y , $key2, $key3, $key4};



Linguaggi dinamici – A.A. 2009/2010
                                                     54
Reference
T   La variabile reference (o, più semplicemente,
    una reference) è un particolare tipo di
    variabile scalare il cui contenuto è l'indirizzo
    d u a t a a ab e
    di un'altra variabile
      T   Analogo dei puntatori nel linguaggio C
      T   Può puntare ad un tipo qualunque, senza
                                   qualunque
          dichiarazione esplicita (dynamic typing)
           T Intero


           T Floating point


           T St i
             Stringa
           T Reference


           T Array, Hash
Linguaggi dinamici – A.A. 2009/2010
                                                       55
Nomi delle variabili reference
T   Tutte le variabili reference, in quanto scalari,
    cominciano con il simbolo $
T   Segue il nome vero e proprio, una
    combinazione arbitrariamente lunga di lettere,
                                              lettere
    digit ed underscore (_)
T   Esempi di nomi di variabile leciti:
    E       i       i       i bil l iti
      T   $wt
      T   $foo_blah
      T   $
          $x100y200z
               y
      T   $HiDave
      T   $Very_Descriptive_Name
          $Very Descriptive Name
Linguaggi dinamici – A.A. 2009/2010
                                                        56
Assegnamento reference
T Si utilizza l'operatore = per l'assegnamento
  dell hash
  dell'hash ad una variabile
T Si utilizza l'operatore  per calcolare l'indirizzo

  di memoria di una variabile
@x = (1, 2, 3, 4);
$rx = @x;




Linguaggi dinamici – A.A. 2009/2010
                                                        57
Dereferenziazione reference
T   Data una reference, si utilizza il seguente
    costrutto per ottenere il contenuto
    dell'indirizzo
      T   Si individua il simbolo associato al tipo di
          variabile ($ per uno scalare, @ per un array, %
          per un hash)
      T   Si aprono e chiudono le parentesi graffe {}
      T   Si scrive l'espressione reference fra le
                    l espressione
          parentesi graffe
@x (1, 2, 3, 4); $rx @x;
@ = (1 2 3 4) $ = @
@orig_copy_x = @{ $rx };

Linguaggi dinamici – A.A. 2009/2010
                                                            58
Dereferenziazione reference
T Il costrutto può essere semplificato togliendo
  le parentesi graffe
@x = (1, 2, 3, 4); $rx = @x;
$orig_copy_x = @$
$ i               @$rx;
T La semplificazione vale solo nel caso in cui

  l'espressione fra parentesi graffe sia scalare!




Linguaggi dinamici – A.A. 2009/2010
                                                    59
Variabili anonime
T   Le variabili anonime sono delle variabili a cui
    non è direttamente associato un nome
      Esse vengono dichiarate non direttamente,
      T

      come avviene normalmente
    T Si genera un contenuto di una variabile


    T L
      Lo si fa puntare da una reference
          if       t   d        f
T   Meccanismo analogo (concettualmente) alla
    malloc() d l C
      ll () del




Linguaggi dinamici – A.A. 2009/2010
                                                      60
Dichiarazione variabili anonime
T   Array:
    T   La lista anonima associata alla variabile
        puntatrice si indica con le parentesi quadre
    T   $x [5, 12 13];
        $ = [5 12, 13]
T   Hash:
    T   La lista anonima associata alla variabile
        puntatrice si indica con le parentesi graffe
    T   $x = { name => “nome”, age => 30};
T   È stata creata una struttura dati puntata dalla
    variabile $x; la lista non è direttamente
    assoc ata
    associata ad u nome d variabile ( suo
                               un o e di a ab e (il
    indirizzo lo è!)
Linguaggi dinamici – A.A. 2009/2010
                                                       61
Dereferenziazione variabili anonime
T Si usa l'operatore -> per ottenere il contenuto
  puntato dalla variabile
$x = [5, 12, 13];
$y {name => "
$ ={             "penelope", age => 105}
                       l  "         105};
print $x->[1] . “n”;
print $y->{age}, "n";




Linguaggi dinamici – A.A. 2009/2010
                                                    62
Scope
T   È possibile definire due tipi diversi di scope
    per le variabili
T   Scope statico:
      T   Dichiarazione di variabile preceduta dalla parola
          Di hi    i          i bil       d t d ll       l
          chiave my
      T   my nome_var = valore;
                            l
T   Scope dinamico:
      T   Dichiarazione di variabile preceduta dalla parola
          chiave local
      T   local nome_var = valore;


Linguaggi dinamici – A.A. 2009/2010
                                                              63
Scope
T   È possibile anche non dichiarare
    esplicitamente lo scope di una variabile,
                                   variabile
    omettendo le parole chiavi my e local
      T   $x = 3;
T   In tal caso, la variabile è dichiarata
    globalmente
      T   È visibile in moduli diversi!
T   L'uso della dichiarazione my è fortemente
    consigliato (incapsulamento)



Linguaggi dinamici – A.A. 2009/2010
                                                64
Costrutti condizionali
T   Costrutto if-then-else: simile al linguaggio C
if (condizione) {
    statement;
} elsif (condizione) {
    statement;
} else {
    statement;
}
T   Occorre sempre mettere le parentesi graffe
    (anche quando si ha un solo statement)
T   else if di
     l      diventa elsif
                 t l if
Linguaggi dinamici – A.A. 2009/2010
                                                     65
Costrutti condizionali
T   Costrutto unless: duale dell'if-then-else
unless (condizione) {
  statement;
}
T   Viene eseguito lo statement finché la
    condizione NON si verifica
T   Perfettamente equivalente a:
If (! condizione) {
    statement;
}

Linguaggi dinamici – A.A. 2009/2010
                                                66
Etichette
T   Il perl supporta le etichette, ossia sequenze di
    caratteri alfanumerici che possono essere
    raggiunte tramite comandi di salto
T   Una etichetta è solitamente descritta da una
    stringa di caratteri in maiuscolo, terminata dal
    carattere speciale :
LABEL:
 statement;
 …
T   Le etichette sono usate per “bollare” i blocchi
    di codice relativi ai costrutti iterativi
Linguaggi dinamici – A.A. 2009/2010
                                                       67
Comandi di salto
T Comando goto: permette di saltare ad una
  specifica etichetta
goto LABEL;
T C
  Comando next:
          d       t
   T Salta alla prossima iterazione di un ciclo


   T Se accompagnato da una label, salta

     direttamente alla label




Linguaggi dinamici – A.A. 2009/2010
                                                  68
Comandi di salto
T   Comando last:
    T Finisce un ciclo


    T Se accompagnato da una label, salta alla

      label per l'ultima volta
T   Comando redo:
    T Ripete l'iterazione corrente del ciclo


    T Se accompagnato da una label, ripete
                                  label
      l'iterazione associata alla stessa



Linguaggi dinamici – A.A. 2009/2010
                                                 69
Comandi di salto
T   Attenzione!
T   I comandi di salto (soprattutto il goto)
    potrebbero rendere meno chiaro il flusso di
    esecuzione del programma
T   E non sono essenziali per l’espressività
     T   Altri
         Alt i costrutti possono essere usati al loro
                  t tti                    ti l l
         posto
T   Ma a volte sono comodi!




Linguaggi dinamici – A.A. 2009/2010
                                                        70
Costrutti iterativi
T   Costrutto while: identico al linguaggio C
while (condizione) {
  statement;
}
T   Costrutto do-until: analogo del costrutto do-
    while nel linguaggio C
do {
   statement;
} until (condizione);



Linguaggi dinamici – A.A. 2009/2010
                                                    71
Costrutti iterativi
T   Costrutto for: simile al linguaggio C
LABEL:
for (espr1; espr2; espr3) {
  statement;
}
T   espr1 definisce il valore iniziale dell'indice
    nell'iterazione, espr2 definisce la condizione di
                    , p
    stop, espr3 definisce la modalità di incremento
    dell'indice
T   Ne esiste anche una versione che sfrutta una
    lista (tipo foreach)
Linguaggi dinamici – A.A. 2009/2010
                                                        72
Costrutti iterativi
T   Costrutto foreach:
LABEL:
foreach $var (lista) {
  statement;
}
T Qui, $var assume tutti i valori di una lista
foreach $count(5 4 3 2 1 “Via”) {
          $count(5, 4, 3, 2, 1, Via )
   print $count . “n”;
}
T Il costrutto foreach è molto più efficiente del

  for, perché non deve valutare le espressioni
Linguaggi dinamici – A.A. 2009/2010
                                                    73

Weitere ähnliche Inhalte

Was ist angesagt?

Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogrammingMajong DevJfu
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMobileSchool
 
Le Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli AutomiLe Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli AutomiGiuseppe Luciano
 
Linguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: ParsingLinguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: ParsingMajong DevJfu
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++Majong 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
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai ProgrammiMajong DevJfu
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 

Was ist angesagt? (20)

Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Le Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli AutomiLe Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli Automi
 
Linguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: ParsingLinguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: Parsing
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
 
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
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
T5 memoria
T5 memoriaT5 memoria
T5 memoria
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 

Andere mochten auch

Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testingMajong DevJfu
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Djangobarmassimo
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 

Andere mochten auch (8)

UE week 2
UE week 2UE week 2
UE week 2
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
T1 introduzione
T1 introduzioneT1 introduzione
T1 introduzione
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Django
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 

Mehr von Majong 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
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptationMajong DevJfu
 

Mehr von Majong DevJfu (20)

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
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
 

Pe t1 perl-intro

  • 1. LINGUAGGI DINAMICI PARTE 2 IL LINGUAGGIO PERL Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Parte 2 Introduzione al Perl Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Un po’ di storia T PERL: acronimo di Practical Extraction Report Language T Nasce nel 1986, come un insieme di strumenti per la gestione della configurazione di un server USENET T Autore: L A t Larry Wall W ll T 1987: V1.0 T 1999: V5.003 (milestone release) T 2008: V5 10 V5.10 T Perl6 (radicalmente diverso da V5.10) è in fase di standardizzazione Linguaggi dinamici – A.A. 2009/2010 3
  • 4. Caratteristiche T Sintassi estremamente ricca e variegata T Motto del Perl: “There is more than one way to do it” (TIMTOWTDI) T Supporto eccellente per la manipolazione di S t ll t l i l i testi (espressioni regolari del Perl) T Include diversi comandi di shell come builtin T Molto liberale nei costrutti e nella tipizzazione p T Archivio di moduli sconfinato (CPAN) T Portabile Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Esecuzione T L'esecuzione avviene attraverso l'interprete perl, perl presente in forma pacchettizzata in tutte le distribuzioni di software moderne T GNU/Linux (Debian): sudo apt-get install perl T Windows: ActivePerl T Si esegue un programma passandolo come d l argomento all'interprete: T perl filename T perl -e ' statement ' Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Documentazione T Il Perl fornisce il proprio strumento di documentazione, documentazione analogo alle man page T Comando perldoc T Debian: sudo apt-get install perl-doc D bi d t t i t ll ld T perldoc perltoc T Usi comuni: T p perldoc argomento: invoca la man page di g p g argomento (deve essere un nome esatto) T perldoc -q parola chiave: ricerca la parola q parola_chiave: chiave nelle FAQ T perldoc -f funzione: invoca la man page della f funzione builtin Linguaggi dinamici – A.A. 2009/2010 6
  • 7. Blocchi di codice, statement, commenti T Il singolo statement è concluso da un carattere punto e virgola ; T print( “Hello worldn” ); T Il bl blocco di codice è delimitato da parentesi di d li it t d t i graffe {} T { print ( “Hello worldn” ); } T Forte analogia con il linguaggio C T Il carattere # rappresenta l'inizio di un commento Linguaggi dinamici – A.A. 2009/2010 7
  • 8. Scheletro di un programma Perl #!/usr/bin/perl <direttive pragma> <direttive di importazione moduli esterni> <blocco BEGIN> blocco BEGIN <Sequenza di statement> <blocco END> Linguaggi dinamici – A.A. 2009/2010 8
  • 9. Direttive pragma T Una direttiva pragma è uno statement che importa uno dei moduli speciali del Perl T Tali moduli non arricchiscono le funzionalità offerte dal linguaggio bensì forniscono al linguaggio, compilatore/interprete informazioni sul programma stesso T Il formato di una direttiva pragma è il seguente: use modulo_speciale; T T “use” è una funzione builtin che importa le funzionalità di un modulo Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Esempi di direttive pragma T use warnings: l'interprete stampa messaggi di avvertimento in caso di espressioni a rischio T use warnings; T Fa F un controllo locale, ad es. non ci avverte di t ll l l d i t possibili problemi tra file diversi T Per bilit P abilitare tutti i messaggi di avvertimento, t tti i ti t occorre invocare l'interprete con l'opzione -w Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Esempi di direttive pragma T use strict: vieta usi “libertini” del codice, producendo errori a compile o a run time T use strict; T perldoc strict per maggiori informazioni ld ti t i ii f i i T use diagnostics: strumento di debugging; in caso di errore a compile o a run time, stampa un messaggio di diagnostica che prova a spiegare l'accaduto T use diagnostics; Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Direttive di importazione moduli T Una direttiva di importazione moduli è uno statement che importa uno dei moduli del Perl T Tali moduli arricchiscono le funzionalità esterne offerte T GUI, database, rete, processi, thread, file T Il formato di una direttiva di importazione è il seguente: Tuse Path::To::NameSpace::Module; T Il modulo è identificato dal suo nome completo p (inclusivo di namespace) Linguaggi dinamici – A.A. 2009/2010 12
  • 13. Blocchi BEGIN{}, END{} T In un programma possono essere specificati due blocchi di codice particolari, aventi nome particolari BEGIN ed END rispettivamente T Sintassi mutuata dal linguaggio AWK T BEGIN: compilato ed interpretato non appena il parser lo identifica T Controllo di esistenza moduli a livello di compilazione il i T Allocazione di risorse T END: interpretato all'uscita del programma T Rilascio di risorse Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Variabili T Il Perl definisce alcune categorie di variabili T Scalari: contenitori semplici di una sola informazione (variabili semplici) T Array: oggetti che possono contenere più di A tti h t iù una informazione T Hash: tabella H h t b ll associativa chiave => valore i ti hi > l T Reference: variabili che contengono un'altra variabile (puntatori opachi) i bil ( t t i hi) T Assegnamento di variabili: operatore = Linguaggi dinamici – A.A. 2009/2010 14
  • 15. Variabili scalari T La variabile scalare (o, più semplicemente, uno scalare) rappresenta il tipo di dato più semplice in Perl T Può contenere un solo valore (da cui il nome nome, mutato dalla Fisica) T Il valore può essere di un tipo qualunque, senza qualunque dichiarazione esplicita (dynamic typing) T Intero T Floating point T St i Stringa Linguaggi dinamici – A.A. 2009/2010 15
  • 16. Nomi delle variabili scalari T Tutte le variabili scalari cominciano con il simbolo $ T Segue il nome vero e proprio, una combinazione arbitrariamente lunga di lettere, lettere digit ed underscore (_) T Esempi di nomi di variabile leciti: E i i i bil l iti T $foo T $foo_blah T $ $x100y200z y T $HiDave T $Very_Descriptive_Name $Very Descriptive Name Linguaggi dinamici – A.A. 2009/2010 16
  • 17. Assegnamento scalare T Si utilizza l'operatore = $pi = 3.141593; 3 141593; $foo = “foo”; Ricordatevi i punti e virgola $Foo = 27; al termine di ciascuno statement! Linguaggi dinamici – A.A. 2009/2010 17
  • 18. Costanti scalari T Le costanti scalari sono definite allo stesso modo del C 3 3.14159265 6.02E23 “foo” Non iniziate le costanti 032 numeriche con un 0. Il Perl lo interpreta come una 0x1a codifica ottale! Linguaggi dinamici – A.A. 2009/2010 18
  • 19. Stringhe scalari (literals) T Le variabili scalari contenenti una stringa devono essere racchiuse fra singole quote ( ') (' ) oppure fra doppie quote (“ ”) T Singole quote: T La stringa viene considerata così com'è, senza alcun intervento dell'interprete dell interprete T Doppie quote: T L'interprete interviene nella costruzione della stringa T È possibile utilizzare alcune sequenze speciali T È possibile inserire risultati di espressioni p p Linguaggi dinamici – A.A. 2009/2010 19
  • 20. Quote doppie e backslash T All'interno di una stringa con quote doppie, il carattere backslash () introduce le sequenze speciali T n: newline T r: carriage return T t: tabulazione t t b l i T : un singolo carattere backslash T ”: un singolo carattere di virgolette “ Linguaggi dinamici – A.A. 2009/2010 20
  • 21. Esempi di stringhe Espressione: Risultato visivo: “Hellon” Hello Newline 'Hellon' Hellon No newline “12t6t3” 12 6 3 '12t6t3' 12t6t3 12t6t3 “He said ”Hi”” He said ”Hi” 'He said ”Hi”’ He said ”Hi” 'He said ”Hi”' He said ”Hi” Linguaggi dinamici – A.A. 2009/2010 21
  • 22. Interpolazione di variabili T All'interno di una stringa con quote doppie, una variabile scalare è interpolata – essa viene rimpiazzata dal suo valore $num = 13; $foo = “The number is $numn”; print $foo; The number is 13 Linguaggi dinamici – A.A. 2009/2010 22
  • 23. Problemi legati all'interpolazione T Si consideri il seguente frammento di codice $num = 13; $number = 17; $foo = “The number is $number”; T Quale è il valore di $foo? T "The number is 13ber" T "The number is 17" T Il Perl disambigua questo caso considerando il nome di variabile più lungo possibile T $foo $f : "Th number is 17" "The b i Linguaggi dinamici – A.A. 2009/2010 23
  • 24. Disabilitare l'interpolazione T In certi casi, l'interpolazione deve essere disabilitata T Stampa stringhe contenenti il nome di una variabile ( The number in $num is 13”) (“The 13 ) T Si usa il backslash come operatore di escape T Il backslash, posto di fronte ad un carattere b k l h f d speciale, ne annulla il significato speciale e lo rende un semplice carattere T $foo = "The number in $num is $num"; Linguaggi dinamici – A.A. 2009/2010 24
  • 25. Operatori stringa T Il Perl mette a disposizione l'operatore di concatenazione di stringhe ( )(.) T Esempi $myname = "D $ "Dave" . " " . "H lli " "Hollinger"; " $myname = $first . $blank . $last; Linguaggi dinamici – A.A. 2009/2010 25
  • 26. Operatori stringa T Il Perl mette a disposizione l'operatore di ripetizione di stringhe (x) Espressione: Valore: “M” x 4 M “MMMM” MMMM “Hello” x 2 “HelloHello” “Joe” x (5 - 2) “JoeJoeJoe” Linguaggi dinamici – A.A. 2009/2010 26
  • 27. Operatori di confronto T Il Perl mette a disposizione operatori di confronto per i numeri e per le stringhe T Attenzione: non essendo il tipo di dato di uno scalare dichiarato esplicitamente l'interprete esplicitamente, l interprete non è in grado di segnalare a tempo di compilazione se è usato l'operatore giusto l operatore T Se si intende usare uno scalare in un dato modo (numero o stringa), bisogna invocare d ( ti ) bi i esplicitamente l'operatore di confronto adatto T Valori diversi da 0 sono considerati TRUE; il valore 0 è considerato FALSE Linguaggi dinamici – A.A. 2009/2010 27
  • 28. Operatori di confronto Confronto Operatore Operatore Numerico Stringa Uguale == eq Minore di < lt Maggiore di > gt Minore o uguale di g ale <= < le Maggiore o uguale di >= ge Linguaggi dinamici – A.A. 2009/2010 28
  • 29. Confronto fra stringhe T Il confronto fra stringhe è quello classico lessicografico T Si estrae il primo carattere delle stringa T Si calcolano i relativi codici ASCII l l l ti i di i T Si confrontano tali codici numerici T Al numero più basso corrisponde la stringa minore T Se i caratteri sono uguali, si procede con il secondo carattere, e così via Linguaggi dinamici – A.A. 2009/2010 29
  • 30. Conversione dei dati T A seconda del contesto utilizzato, l'interprete converte scalari in tipi di dato numero o stringa T 2 * “3 14” provoca una conversione di “3 14” in 3.14 3.14 numero float, poiché * è definito solo sui tipi di dato numerici T (117 lt 23) converte i numeri 117 e 23 in stringhe, stringhe poiché l'operatore lt è definito solo sui l operatore tipi di dato stringa T $x == “POST” converte entrambe le variabili ad POST un numero, poiché l'operatore == è definito solo sui tipi di dato numero Linguaggi dinamici – A.A. 2009/2010 30
  • 31. Conversione stringa : numero T È sufficiente che una stringa inizi con una rappresentazione valida di un numero perché una conversione stringa : intero possa aver luogo uogo T In un contesto numerico: T “13.5Joe” “13 5Joe” viene convertito in 13.5 13 5 T “Hello” viene convertito in 0 T “Joe13.5” viene convertito in 0 Linguaggi dinamici – A.A. 2009/2010 31
  • 32. Operatori booleani T Gli operatori booleani hanno la stessa sintassi del linguaggio C T Operatore or logico ||: T Se S il primo operando è diverso da 0, ritorna 1 i d di d 0 it T Altrimenti, ritorna 1 se il secondo operando è diverso da 0 e 0 se è uguale a 0 di d l T Operatore and logico &&: T Se il primo operando è uguale a 0, ritorna 0 T Altrimenti, ritorna 1 se il secondo operando è diverso da 0 e 0 se è uguale a 0 Linguaggi dinamici – A.A. 2009/2010 32
  • 33. Operatori booleani T Gli operatori booleani hanno la stessa sintassi del linguaggio C T Operatore or bit a bit |: T Ritorna il risultato d ll' bit a bit Rit i lt t dell'or T 1|4=5 T Operatore and bit a bit &: T Ritorna il risultato dell'and bit a bit T 1&3=1 T Per ulteriori chiarimenti si consulti il manuale chiarimenti, degli operatori del Perl: perldoc perlop Linguaggi dinamici – A.A. 2009/2010 33
  • 34. Operatori booleani T Gli operatori booleani hanno la stessa sintassi del linguaggio C T Operatore di negazione logica !: T Ritorna il risultato d ll negazione logica Rit i lt t della i l i T 0 diventa 1 T 1 diventa 0 T q qualunque altro valore porta ad un risultato q p indefinito Linguaggi dinamici – A.A. 2009/2010 34
  • 35. Array T La variabile array (o, più semplicemente, un array) rappresenta l'astrazione di una lista l astrazione T Può contenere più di un valore T Il valore può essere di un tipo qualunque l ò ti l scalare, senza dichiarazione esplicita (dynamic typing) T Intero T Fl Floating point ti i t T Stringa T Reference T Un array non può contenere un altro array; ma può contenere un puntatore ad un altro array Linguaggi dinamici – A.A. 2009/2010 35
  • 36. Nomi delle variabili array T Tutte le variabili array cominciano con il simbolo @ T Segue il nome vero e proprio, una combinazione arbitrariamente lunga di lettere, lettere digit ed underscore (_) T Esempi di nomi di variabile leciti: E i i i bil l iti T @wt T @foo_blah T @ @x100y200z y T @HiDave T @Very_Descriptive_Name @Very Descriptive Name Linguaggi dinamici – A.A. 2009/2010 36
  • 37. Assegnazione array T Si utilizza l'operatore = @wt = (1, 2 3 4); (1 2, 3, @wt = (1, “ciao”, 2); T Attenzione: l'assegnazione di un array all'interno di un array è idempotente T @wt = (1, (2, 3), 4); ha lo stesso significato di @ @wt = ( , 2, 3, 4); (1, , , ); Linguaggi dinamici – A.A. 2009/2010 37
  • 38. Accesso elementi di un array T Ciascun elemento di un array è una variabile scalare T Pertanto, un elemento di un array è identificato dal simbolo $ e non da @ (!) $, T Per il resto, la sintassi è simile al C T Gli indici di un array partono da 0 @ @wt = ( , 2, 3, 4); (1, , , ); print $wt[2]; Stampa 3 T Si possono usare indici negativi; -1 è l'ultimo elemento, -2 il penultimo, e così via l t 2 lti ì i Linguaggi dinamici – A.A. 2009/2010 38
  • 39. Array multidimensionali T Gli array multidimensionali sono dichiarati e gestiti come nel linguaggio C T Per specificare molteplici dimensioni, si usano altrettanti indici fra parentesi quadreIl gestore della memoria dell'interprete alloca T $x[7][4][3] 12; $ [7][4][3] = 12 Linguaggi dinamici – A.A. 2009/2010 39
  • 40. Lista T Una lista è un contenitore di elementi fra parentesi tonde T (1, 2, 3, 4) negli esempi precedenti T @x (1, 2 3, 4); @ = (1 2, 3 4) assegna l lista (1, 2, 3, 4) alla la li t (1 2 3 ll variabile di tipo array x T L'uso più ovvio delle liste è nei cicli: L' iù i d ll li t i i li for $i ( (1, 2, 4) ) { print $i . “n”; } Linguaggi dinamici – A.A. 2009/2010 40
  • 41. Array e code T L'array può essere gestito come una coda T Funzione builtin shift: T shift @array: rimuove e ritorna il primo valore dell'array @array T Funzione builtin unshift: T unshift @array, @list: inserisce la lista @list in cima alla variabile di tipo array @array, e ritorna il numero di elementi nell'array in caso di successo T unshift @array, $scalar: inserisce lo scalare $scalar in cima alla variabile di tipo array @array, e @array ritorna il numero di elementi nell'array in caso di successo Linguaggi dinamici – A.A. 2009/2010 41
  • 42. Array e stack T L'array può essere gestito come uno stack T Funzione builtin push: T push @array, @list: inserisce la lista @list in coda all'array @array e ritorna il numero di elementi @array, nell'array in caso di successo T push @array, $scalar: inserisce lo scalare $scalar @array in coda all'array @array, e ritorna il numero di elementi nell'array in caso di successo y T Funzione builtin pop: T pop @array: rimuove e ritorna l ultimo l'ultimo elemento di @array Linguaggi dinamici – A.A. 2009/2010 42
  • 43. Contesto scalare e lista T Una lista può essere valutata in due contesti diversi T Scalare: l'operazione che coinvolge la lista produce come risultato uno scalare T Lista: l'operazione che coinvolge la lista produce come risultato una lista o un array T Se si usa (inavvertitamente) una lista in un contesto scalare, il Perl non dà un messaggio t t l P l i di errore! T L'array viene trasformato in uno scalare con una operazione opportuna! T Il numero di elementi dell'array Linguaggi dinamici – A.A. 2009/2010 43
  • 44. Contesti e polimorfismo T L'uso di diversi contesti (scalare, lista) permette di implementare una forma rudimentale di polimorfismo T Si può richiedere che una espressione ritorni un risultato scalare (funzione builtin scalar()) T All'interno di una funzione, si può verificare All'i t f i i ò ifi se il risultato richiesto è un array oppure no (funzione b ilti wantarray()) (f i builtin t ()) Linguaggi dinamici – A.A. 2009/2010 44
  • 45. Slicing degli array T Il Perl permette la gestione diretta di porzioni di array (slicing) T Operatore di range ..: permette di specificare un intervallo contiguo di indici di un array T Operatore di selezione ,: permette di specificare un i di b preciso di un array ifi indice ben i T L'array su cui si effettua lo slicing è referenziato con il simbolo @, dal momento che il risultato delle operazioni è un array @array_slice = @array_di_partenza[a..b]; @array_slice @array_di_partenza[a, b, c, @array slice = @array di partenza[a b c d]; Linguaggi dinamici – A.A. 2009/2010 45
  • 46. Hash T La variabile hash (o, più semplicemente, un hash) rappresenta l astrazione di una lista l'astrazione associativa T Può contenere più di un valore T Il valore può essere di un tipo qualunque scalare, scalare senza dichiarazione esplicita (dynamic typing) T Intero T Floating point T St i Stringa T Reference Linguaggi dinamici – A.A. 2009/2010 46
  • 47. Nomi delle variabili hash T Tutte le variabili hash cominciano con il simbolo % T Segue il nome vero e proprio, una combinazione arbitrariamente lunga di lettere, lettere digit ed underscore (_) T Esempi di nomi di variabile leciti: E i i i bil l iti T %wt T %foo_blah T %x100y200z y T %HiDave T %Very_Descriptive_Name %Very Descriptive Name Linguaggi dinamici – A.A. 2009/2010 47
  • 48. Assegnamento hash T Si utilizza l'operatore = per l'assegnamento dell hash dell'hash ad una variabile T Si utilizza l'operatore => per associare stringhe letterali (dette chiavi) ai corrispettivi valori %wt % t = ( abc => 12, d f => “S Francisco” ); b 12 defg “San F i ”) T Il contenuto della hash è una lista di elementi, che può quindi essere scritta come un array T In quest'ultimo caso, le chiavi devono essere q , racchiuse fra quote %wt = ( “abc”, 12 “defg”, “San Francisco ); abc 12, defg San Francisco” Linguaggi dinamici – A.A. 2009/2010 48
  • 49. Accesso elementi di un hash T Ciascun elemento di un hash è una variabile scalare T Pertanto, un elemento di una hash è identificato dal simbolo $ e non da % (!) $, T A differenza degli array, qui la chiave è racchiusa fra parentesi graffe hi f t i ff print $wt{abc} ; Stampa 12 Linguaggi dinamici – A.A. 2009/2010 49
  • 50. Esistenza chiavi hash T Si utilizza la funzione builtin exists per controllare se una chiave esiste in un hash T exists $wt{abc}; T Vuole i i V l in ingresso il contenuto puntato da una t t t t d chiave di un hash T Ritorna 1 se l chiave esiste (anche se con un Rit la hi i t ( h valore undef) T Ritorna 0 altrimenti Rit lt i ti T exists() funziona anche con gli array Linguaggi dinamici – A.A. 2009/2010 50
  • 51. Definizione chiavi hash T Si utilizza la funzione builtin defined per controllare se una chiave esiste ed è definita in un hash T defined $wt{abc}; T Vuole in ingresso il contenuto puntato da una chiave di un hash T Ritorna 1 se la chiave esiste ed ha un valore definito T Ritorna 0 altrimenti T defined() funziona anche con gli array Linguaggi dinamici – A.A. 2009/2010 51
  • 52. Distruzione chiavi hash T Si utilizza la funzione builtin delete per distruggere una chiave ed il suo contenuto delete $wt{abc}; T d l t () funziona anche con gli array delete() f i h li T Se si cancella l'ultimo elemento dell'array, l'operazione è equivalente ad una pop T Se si cancella un elemento interno, esso non , viene rimosso, ma viene sostituito con undef T Non appena si prova ad accederlo, il comportamento del programma diventa indefinito Linguaggi dinamici – A.A. 2009/2010 52
  • 53. Accesso a chiavi e valori T Sono messi a disposizione due metodi molto comodi per gestire in blocco l intero insieme l'intero delle chiavi e dei valori di un hash T keys (%hash): T Ritorna un array contenente le chiavi dell'hash T L'ordine non è definito a priori (non ci fate ' di d fi i i i( if affidamento) T values (%hash): T Ritorna un array contenente i valori dell'hash T L'ordine non è definito a priori (non ci fate affidamento)) Linguaggi dinamici – A.A. 2009/2010 53
  • 54. Slicing degli hash T Il Perl permette la gestione diretta di porzioni di hash (slicing) T L'operazione di range non avrebbe senso T O Operatore di selezione , permette di t l i tt specificare un indice ben preciso di un hash T L'hash su cui si effettua lo slicing è referenziato con il simbolo @, poiché si sta operando con un array di indici @ @values = @hash{$key1, $ y , $ y , $ y }; @ {$ y , $key2, $key3, $key4}; Linguaggi dinamici – A.A. 2009/2010 54
  • 55. Reference T La variabile reference (o, più semplicemente, una reference) è un particolare tipo di variabile scalare il cui contenuto è l'indirizzo d u a t a a ab e di un'altra variabile T Analogo dei puntatori nel linguaggio C T Può puntare ad un tipo qualunque, senza qualunque dichiarazione esplicita (dynamic typing) T Intero T Floating point T St i Stringa T Reference T Array, Hash Linguaggi dinamici – A.A. 2009/2010 55
  • 56. Nomi delle variabili reference T Tutte le variabili reference, in quanto scalari, cominciano con il simbolo $ T Segue il nome vero e proprio, una combinazione arbitrariamente lunga di lettere, lettere digit ed underscore (_) T Esempi di nomi di variabile leciti: E i i i bil l iti T $wt T $foo_blah T $ $x100y200z y T $HiDave T $Very_Descriptive_Name $Very Descriptive Name Linguaggi dinamici – A.A. 2009/2010 56
  • 57. Assegnamento reference T Si utilizza l'operatore = per l'assegnamento dell hash dell'hash ad una variabile T Si utilizza l'operatore per calcolare l'indirizzo di memoria di una variabile @x = (1, 2, 3, 4); $rx = @x; Linguaggi dinamici – A.A. 2009/2010 57
  • 58. Dereferenziazione reference T Data una reference, si utilizza il seguente costrutto per ottenere il contenuto dell'indirizzo T Si individua il simbolo associato al tipo di variabile ($ per uno scalare, @ per un array, % per un hash) T Si aprono e chiudono le parentesi graffe {} T Si scrive l'espressione reference fra le l espressione parentesi graffe @x (1, 2, 3, 4); $rx @x; @ = (1 2 3 4) $ = @ @orig_copy_x = @{ $rx }; Linguaggi dinamici – A.A. 2009/2010 58
  • 59. Dereferenziazione reference T Il costrutto può essere semplificato togliendo le parentesi graffe @x = (1, 2, 3, 4); $rx = @x; $orig_copy_x = @$ $ i @$rx; T La semplificazione vale solo nel caso in cui l'espressione fra parentesi graffe sia scalare! Linguaggi dinamici – A.A. 2009/2010 59
  • 60. Variabili anonime T Le variabili anonime sono delle variabili a cui non è direttamente associato un nome Esse vengono dichiarate non direttamente, T come avviene normalmente T Si genera un contenuto di una variabile T L Lo si fa puntare da una reference if t d f T Meccanismo analogo (concettualmente) alla malloc() d l C ll () del Linguaggi dinamici – A.A. 2009/2010 60
  • 61. Dichiarazione variabili anonime T Array: T La lista anonima associata alla variabile puntatrice si indica con le parentesi quadre T $x [5, 12 13]; $ = [5 12, 13] T Hash: T La lista anonima associata alla variabile puntatrice si indica con le parentesi graffe T $x = { name => “nome”, age => 30}; T È stata creata una struttura dati puntata dalla variabile $x; la lista non è direttamente assoc ata associata ad u nome d variabile ( suo un o e di a ab e (il indirizzo lo è!) Linguaggi dinamici – A.A. 2009/2010 61
  • 62. Dereferenziazione variabili anonime T Si usa l'operatore -> per ottenere il contenuto puntato dalla variabile $x = [5, 12, 13]; $y {name => " $ ={ "penelope", age => 105} l " 105}; print $x->[1] . “n”; print $y->{age}, "n"; Linguaggi dinamici – A.A. 2009/2010 62
  • 63. Scope T È possibile definire due tipi diversi di scope per le variabili T Scope statico: T Dichiarazione di variabile preceduta dalla parola Di hi i i bil d t d ll l chiave my T my nome_var = valore; l T Scope dinamico: T Dichiarazione di variabile preceduta dalla parola chiave local T local nome_var = valore; Linguaggi dinamici – A.A. 2009/2010 63
  • 64. Scope T È possibile anche non dichiarare esplicitamente lo scope di una variabile, variabile omettendo le parole chiavi my e local T $x = 3; T In tal caso, la variabile è dichiarata globalmente T È visibile in moduli diversi! T L'uso della dichiarazione my è fortemente consigliato (incapsulamento) Linguaggi dinamici – A.A. 2009/2010 64
  • 65. Costrutti condizionali T Costrutto if-then-else: simile al linguaggio C if (condizione) { statement; } elsif (condizione) { statement; } else { statement; } T Occorre sempre mettere le parentesi graffe (anche quando si ha un solo statement) T else if di l diventa elsif t l if Linguaggi dinamici – A.A. 2009/2010 65
  • 66. Costrutti condizionali T Costrutto unless: duale dell'if-then-else unless (condizione) { statement; } T Viene eseguito lo statement finché la condizione NON si verifica T Perfettamente equivalente a: If (! condizione) { statement; } Linguaggi dinamici – A.A. 2009/2010 66
  • 67. Etichette T Il perl supporta le etichette, ossia sequenze di caratteri alfanumerici che possono essere raggiunte tramite comandi di salto T Una etichetta è solitamente descritta da una stringa di caratteri in maiuscolo, terminata dal carattere speciale : LABEL: statement; … T Le etichette sono usate per “bollare” i blocchi di codice relativi ai costrutti iterativi Linguaggi dinamici – A.A. 2009/2010 67
  • 68. Comandi di salto T Comando goto: permette di saltare ad una specifica etichetta goto LABEL; T C Comando next: d t T Salta alla prossima iterazione di un ciclo T Se accompagnato da una label, salta direttamente alla label Linguaggi dinamici – A.A. 2009/2010 68
  • 69. Comandi di salto T Comando last: T Finisce un ciclo T Se accompagnato da una label, salta alla label per l'ultima volta T Comando redo: T Ripete l'iterazione corrente del ciclo T Se accompagnato da una label, ripete label l'iterazione associata alla stessa Linguaggi dinamici – A.A. 2009/2010 69
  • 70. Comandi di salto T Attenzione! T I comandi di salto (soprattutto il goto) potrebbero rendere meno chiaro il flusso di esecuzione del programma T E non sono essenziali per l’espressività T Altri Alt i costrutti possono essere usati al loro t tti ti l l posto T Ma a volte sono comodi! Linguaggi dinamici – A.A. 2009/2010 70
  • 71. Costrutti iterativi T Costrutto while: identico al linguaggio C while (condizione) { statement; } T Costrutto do-until: analogo del costrutto do- while nel linguaggio C do { statement; } until (condizione); Linguaggi dinamici – A.A. 2009/2010 71
  • 72. Costrutti iterativi T Costrutto for: simile al linguaggio C LABEL: for (espr1; espr2; espr3) { statement; } T espr1 definisce il valore iniziale dell'indice nell'iterazione, espr2 definisce la condizione di , p stop, espr3 definisce la modalità di incremento dell'indice T Ne esiste anche una versione che sfrutta una lista (tipo foreach) Linguaggi dinamici – A.A. 2009/2010 72
  • 73. Costrutti iterativi T Costrutto foreach: LABEL: foreach $var (lista) { statement; } T Qui, $var assume tutti i valori di una lista foreach $count(5 4 3 2 1 “Via”) { $count(5, 4, 3, 2, 1, Via ) print $count . “n”; } T Il costrutto foreach è molto più efficiente del for, perché non deve valutare le espressioni Linguaggi dinamici – A.A. 2009/2010 73