Emiliano Bruni – [email protected]
ITALIAN PERL WORKSHOP 2009
Costruzione di una command
line in Perl
Scopo del gioco
• Costruire una command line per la gestione di
tabelle di database
• Vogliamo avere la possibilità di visualizzare,
aggiungere, modificare e cancellare dati su
tabelle di un DB
• Nel caso di dati strutturati gerarchicamente
vogliamo riportare tale gerarchia nella nostra
command line
Database di esempio
• Configurazione stack TCP/IP di un pc
ip_route
ip_address
PK
id
address
mask
iface
comment
enabled
PK
id
address
mask
gw
iface
distance
comment
enabled
ip_dhcp_client
PK
id
iface
comment
enabled
Struttura gerarchica d’esempio
• ip (sezione)
– address
– route
– dhcp (sezione)
• client
• (server)
Risultato finale
Una buona casa inizia da buone
fondamenta
• Ovviamente cerchiamo su CPAN
–
–
–
–
Fry::Shell
Term::Shell
Zoidberg
Shell::Parser
La scelta è Fry::Shell…perché?
•
•
•
•
•
•
Loading/unloading shell components at runtime
Alias dei comandi già integrato
Help dei comandi già integrato
Opzioni e variabili di ambiente supportate
Antocompletamento già integrato
Comportamente “quasi” completamente modificabile
tramite plugini esterni
– parser
– Autocompletamento
– view
Ma c’è sempre il rovescio della
medaglia
• Progetto abbandonato
– ultima versione del 12 gennaio 2005
• Chiaramente una versione lasciata a metà
– CPAN Testers PASS (1) FAIL (49) UNKNOWN (61)
– Ovviamente, mancando il Makefile.PL
– Alcune funzionalità presenti nella documentazione assenti
in quanto commentate nel codice
– Documentazione incompleta e, IMHO, poco comprensibile
– Un esempio per tutti: se hai Carp, automaticamente carica
il modulo Fry::Error:Carp che non esiste.
• Struttura del codice e gestione della classi non
molto chiara o troppo pro 
Come lo installiamo?
• Scaricando l’ultima versione 0.15
• Prelevando il Makefile.PL dalla 0.14. Ah, non c’è
manco li. Per fortuna che è presente nella 0.11
– use ExtUtils::MakeMaker;
WriteMakefile(NAME=>'Fry::Shell',
VERSION_FROM=>'lib/Fry/Shell.pm', );
Ora che abbiamo lo strumento,
usiamolo!
• Conchiglia in 10 step
1. Hello World
2. Patch di Fry::Shell per rimuovere il Carp error
3. Vediamo come si aggiungono gli alias e gli help
4. Morte dei comandi precaricati
5. Aggiungiamo il comando help e quit
6. Il nostro primo comando di sezione, il comando ip
7. Aggiungiamo tutti gli altri comandi di sezione
8. Aggiungiamo / e .. per muoverci tra le sezioni
9. CRUD
10. Esempio completo (quasi)
Step 1: Hello World