2009/3/30 Valerio Crini <span dir="ltr">&lt;<a href="mailto:vcrini@gmail.com">vcrini@gmail.com</a>&gt;</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&#39; 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&#39;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 &quot;subroutine 1&quot;;<br>}<br>come faccio a non essere costretto a scrivere<br><br>in testa al file @export= qw (sub1) ?</blockquote>
<div><br>E&#39; una domanda molto interessante.  Ci sono vari modi per farlo:<br><br>1) usare dei flag &quot;questo e&#39; esportabile&quot; 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&#39; 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&#39; sofisticato per fare l&#39;esportaggio.  Per esempio Sub::Exporter ti potrebbe permettere di dire<br><br>   &quot;Creami i sub /pippo pluto pinco/ che saranno generati da un sub \&amp;make_constant&quot;<br>
<br>(dove magari il make_constant restituera&#39; valori tipo &quot;PIPPO&quot;, &quot;PLUTO&quot;, &quot;PINCO&quot; a seconda del nome del sub, per dare un banalissimo esempio).<br><br>E&#39; quest&#39;approccio 3 che mi sembra forse quello piu&#39; 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&#39; e&#39; possibile che a ristrutturare un po&#39;, 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&#39; di altri dettagli si potrebbe considerare un po&#39; altre soluzioni,<br><br>Ciao,<br>osfameron<br></div></div>