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