2009/3/30 Valerio Crini <span dir="ltr"><<a href="mailto:vcrini@gmail.com">vcrini@gmail.com</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Salve nuovamente,<br>adesso ho una domanda che mi torce lo stomaco in questi giorni.<br>Ho un modulo perl con un sacco di subroutine e se voglio esportarle ho bisogno di elencarle tutte in @export. E' possibile fare in modo da non doverlo fare perchè <br>
le subroutine sono molte (mi servono per definire alcune costanti che ritornano stringhe) e di conseguenza mi tocca scrivere un @export enorme.<br>Inoltre mi piacerebbe applicare il principio DRY (Don't Repeat Yourself) che lo so che è motlo rubyesco ma lo trovo molto logico e mi pare nua bella cosa seguirlo.<br>
<br>insommo dato un modulo<br><br>package Nonvoglioripetermi;<br><br>sub sub1 {<br>return "subroutine 1";<br>}<br>come faccio a non essere costretto a scrivere<br><br>in testa al file @export= qw (sub1) ?</blockquote>
<div><br>E' una domanda molto interessante. Ci sono vari modi per farlo:<br><br>1) usare dei flag "questo e' esportabile" mentre definisci i sub.<br><br>Sfogliano CPAN, trovo per esempio Export::Lexical - non sono sicuro che era quello a cui pensavo (quindi magari cerca ancora su <a href="http://search.cpan.org">search.cpan.org</a>), cmq, usando questo puoi fare<br>
<br> sub sub1 : ExportLexical { ... }<br><br>e verra' esportato automaticamente.<br><br>2) fare una introspezione ai sub definiti. Per esempio, usando Class::Inspector::functions, puoi avere una lista di @function, da assegnare ad @EXPORT (magari greppando i nomi prima).<br>
<br>3) usare un modulo exporter piu' sofisticato per fare l'esportaggio. Per esempio Sub::Exporter ti potrebbe permettere di dire<br><br> "Creami i sub /pippo pluto pinco/ che saranno generati da un sub \&make_constant"<br>
<br>(dove magari il make_constant restituera' valori tipo "PIPPO", "PLUTO", "PINCO" a seconda del nome del sub, per dare un banalissimo esempio).<br><br>E' quest'approccio 3 che mi sembra forse quello piu' ragionevole.<br>
<br>4) Controllare se hai veramente bisogno di fare export di tanti constant.<br><br>Non conoscendo il codice tuo non potrei dare altri commenti... Pero' e' possibile che a ristrutturare un po', non ci sarebbe bisogno. Per esempio, cambiando il modulo in una roba Object Oriented, ciascuno di questi constant diventerebbe un semplice metodo del oggetto. ecc.ecc.<br>
Se pasti un po' di altri dettagli si potrebbe considerare un po' altre soluzioni,<br><br>Ciao,<br>osfameron<br></div></div>