SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
Parte 3




                    Metaprogramming
                         in Perl




Linguaggi dinamici – A.A. 2009/2010
                                      1
Introduzione
   Il Perl mette a disposizione tutta una serie di
     meccanismi per il metaprogramming
         Introspezione di classi e metodi
         Esecuzione di codice generato dinamicamente
         Gestione degli errori a runtime
   Tali funzionalità sono presenti sotto forma di
     funzioni builtin e di moduli




Linguaggi dinamici – A.A. 2009/2010
                                                         2
ESEMPI:
                                                      ref.pl
                               Introspezione
   La funzione builtin ref() restituisce una stringa
     non vuota se l'espressione in ingresso è una
     reference
   La stringa restituita è il nome del tipo di dato
     puntato dalla reference
   Nel caso di oggetti (blessed references), viene
     restituito il nome dell'oggetto corrispondente




Linguaggi dinamici – A.A. 2009/2010
                                                           3
ESEMPI:
                                                isa_can.pl
                               Introspezione
   La classe madre viene chiamata UNIVERSAL
   UNIVERSAL mette a disposizione alcuni
     metodi di introspezione
   Metodo isa(“classe”): restituisce vero se
     l'oggetto è di tipo “classe”
   Metodo can(“metodo”): restituisce una
     reference alla funzione “metodo” dell'oggetto




Linguaggi dinamici – A.A. 2009/2010
                                                         4
Introspezione
   In alternativa, si può usare il modulo
     Class::Meta::Method che fornisce
     un'interfaccia di introspezione più semplice
         Va installato
         perldoc Class::Meta::Method
   Ciascuna classe è estesa con una classe di
     lavoro (Class::Meta::Class) che fornisce
     metodi di introspezione




Linguaggi dinamici – A.A. 2009/2010
                                                    5
ESEMPI:
                                               person.pl
                                 AUTOLOAD
   Quando viene invocato un metodo non definito
     su un oggetto, l'interprete invoca il metodo
     AUTOLOAD
   AUTOLOAD può essere utilizzato per
     implementare in maniera eleganti i metodi get
     ()/set() di una classe




Linguaggi dinamici – A.A. 2009/2010
                                                       6
ESEMPI:
                                                 anon_sub.pl
                       Subroutine anonime
   E' possibile assegnare a variabili delle funzioni
     (che vengono perciò chiamate subroutine
     anonime)
   Tali funzioni non sono invocabili tramite un
     vero e proprio nome
   Le sub anonime possono essere invocate solo
     tramite la reference generata durante
     l'assegnazione




Linguaggi dinamici – A.A. 2009/2010
                                                           7
ESEMPI:
                                                        closure.pl
                                      Closure
   In Perl, le closure (blocchi di codice cui sono
     associati una o più variabili) sono
     implementate tramite subroutine anonime
         Si crea (e si restituisce) una funzione anonima,
           funzione del parametro passato in ingresso




Linguaggi dinamici – A.A. 2009/2010
                                                                 8
ESEMPI:
                                                         eval.pl
           Generazione dinamica di codice
   Si usa il builtin eval nelle sue due forme:
         eval EXPR: l'espressione viene compilata ed
           eseguita come un programma Perl
             La compilazione avviene ad ogni invocazione


         eval BLOCK: il blocco viene compilato ed
           eseguito come un programma Perl
             La compilazione avviene solo una volta


   eval() restituisce il valore dell'ultima
     espressione del mini programma
   Se qualcosa va storto, eval() restituisce undef
     e la variabile speciale $@ contiene il
     messaggio di errore
Linguaggi dinamici – A.A. 2009/2010
                                                               9
ESEMPI:
                                                exceptions.pl
          Gestione degli errori a runtime
   eval() è anche un potente strumento di
     intercettazione degli errori a tempo di
     esecuzione (tramite il controllo di $@)
   Si può emulare la gestione degli errori di Java
     (try-catch) con il modulo Exception::Class
   Costrutto try  eval
   Costrutto catch  Exception::Class-caught()
   Costrutto throw  Exception::Class-throw()




Linguaggi dinamici – A.A. 2009/2010
                                                           10

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
Corso java base
Corso java baseCorso java base
Corso java base
 
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é
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
Corso Java
Corso JavaCorso Java
Corso Java
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Variabili
VariabiliVariabili
Variabili
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Lezione 11 - Bridge
Lezione 11 - BridgeLezione 11 - Bridge
Lezione 11 - Bridge
 

Destacado

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
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 ColorMajong DevJfu
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su LinuxMajong DevJfu
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11Majong DevJfu
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Majong DevJfu
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Majong DevJfu
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d aziendaMajong DevJfu
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile TeoriaMajong DevJfu
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendMajong DevJfu
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Majong DevJfu
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Majong DevJfu
 
Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Majong DevJfu
 

Destacado (20)

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
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
 
8 Www2009 Parte1
8 Www2009 Parte18 Www2009 Parte1
8 Www2009 Parte1
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d azienda
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
 
3 H2 N Parte3
3 H2 N Parte33 H2 N Parte3
3 H2 N Parte3
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: Frontend
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
 
6 Dns Parte2
6 Dns Parte26 Dns Parte2
6 Dns Parte2
 
9 Ftp Telnet Email
9 Ftp Telnet Email9 Ftp Telnet Email
9 Ftp Telnet Email
 
Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07
 
esercizio sigda n 8
esercizio sigda n 8esercizio sigda n 8
esercizio sigda n 8
 

Más de 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
 

Más de 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 a3 perl-metaprogramming

  • 1. Parte 3 Metaprogramming in Perl Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Introduzione Il Perl mette a disposizione tutta una serie di meccanismi per il metaprogramming Introspezione di classi e metodi Esecuzione di codice generato dinamicamente Gestione degli errori a runtime Tali funzionalità sono presenti sotto forma di funzioni builtin e di moduli Linguaggi dinamici – A.A. 2009/2010 2
  • 3. ESEMPI: ref.pl Introspezione La funzione builtin ref() restituisce una stringa non vuota se l'espressione in ingresso è una reference La stringa restituita è il nome del tipo di dato puntato dalla reference Nel caso di oggetti (blessed references), viene restituito il nome dell'oggetto corrispondente Linguaggi dinamici – A.A. 2009/2010 3
  • 4. ESEMPI: isa_can.pl Introspezione La classe madre viene chiamata UNIVERSAL UNIVERSAL mette a disposizione alcuni metodi di introspezione Metodo isa(“classe”): restituisce vero se l'oggetto è di tipo “classe” Metodo can(“metodo”): restituisce una reference alla funzione “metodo” dell'oggetto Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Introspezione In alternativa, si può usare il modulo Class::Meta::Method che fornisce un'interfaccia di introspezione più semplice Va installato perldoc Class::Meta::Method Ciascuna classe è estesa con una classe di lavoro (Class::Meta::Class) che fornisce metodi di introspezione Linguaggi dinamici – A.A. 2009/2010 5
  • 6. ESEMPI: person.pl AUTOLOAD Quando viene invocato un metodo non definito su un oggetto, l'interprete invoca il metodo AUTOLOAD AUTOLOAD può essere utilizzato per implementare in maniera eleganti i metodi get ()/set() di una classe Linguaggi dinamici – A.A. 2009/2010 6
  • 7. ESEMPI: anon_sub.pl Subroutine anonime E' possibile assegnare a variabili delle funzioni (che vengono perciò chiamate subroutine anonime) Tali funzioni non sono invocabili tramite un vero e proprio nome Le sub anonime possono essere invocate solo tramite la reference generata durante l'assegnazione Linguaggi dinamici – A.A. 2009/2010 7
  • 8. ESEMPI: closure.pl Closure In Perl, le closure (blocchi di codice cui sono associati una o più variabili) sono implementate tramite subroutine anonime Si crea (e si restituisce) una funzione anonima, funzione del parametro passato in ingresso Linguaggi dinamici – A.A. 2009/2010 8
  • 9. ESEMPI: eval.pl Generazione dinamica di codice Si usa il builtin eval nelle sue due forme: eval EXPR: l'espressione viene compilata ed eseguita come un programma Perl La compilazione avviene ad ogni invocazione eval BLOCK: il blocco viene compilato ed eseguito come un programma Perl La compilazione avviene solo una volta eval() restituisce il valore dell'ultima espressione del mini programma Se qualcosa va storto, eval() restituisce undef e la variabile speciale $@ contiene il messaggio di errore Linguaggi dinamici – A.A. 2009/2010 9
  • 10. ESEMPI: exceptions.pl Gestione degli errori a runtime eval() è anche un potente strumento di intercettazione degli errori a tempo di esecuzione (tramite il controllo di $@) Si può emulare la gestione degli errori di Java (try-catch) con il modulo Exception::Class Costrutto try eval Costrutto catch Exception::Class-caught() Costrutto throw Exception::Class-throw() Linguaggi dinamici – A.A. 2009/2010 10