2010-05-07 1 views
10

Si consideri che ho 100 moduli Perl in 12 directory. Ma, esaminando il principale script Perl, sembra che siano 100 use p1 ; use p2 ; ecc. Qual è il modo migliore per risolvere questo problema?Come dovrei organizzare molti moduli Perl?

risposta

8

Mi sembra improbabile che tu sia use in tutti e 100 i moduli direttamente nel tuo programma principale. Se il tuo programma utilizza una funzione nel modulo A che chiama una funzione dal modulo B, ma il programma principale stesso non fa riferimento a nulla nel modulo B, il programma dovrebbe solo use A. Non dovrebbe use B a meno che non si chiede nulla direttamente dal modulo B.

Se, d'altra parte, il programma principale realmente parlare direttamente a tutti i 100 moduli, allora è probabilmente semplicemente troppo grande. Identifica diversi raggruppamenti funzionali all'interno del programma e interrompe ciascuno di questi gruppi nel proprio modulo. La ragione principale per fare ciò è che il codice risulti più mantenibile, flessibile e riutilizzabile, ma avrà anche il felice effetto collaterale di ridurre il numero di moduli a cui il programma principale parla direttamente, riducendo così in basso sul numero di dichiarazioni use richieste in qualsiasi posto.

(E, sì, mi rendo conto che 100 era probabilmente un'esagerazione, ma, se ti senti a disagio per il numero di moduli che sono use d dal tuo codice, allora di solito è una forte indicazione che il codice in questione sta cercando di fare troppo in un unico posto e dovrebbe essere suddiviso in una raccolta di moduli.)

4

Mettere tutte le use dichiarazioni in un unico file, dire Mods.pm:

package Mods; 

use Mod1; 
use Mod2; 
... 

e includere il file nello script principale:

use Mods; 
+0

ancora bene. c'è un altro modo per farlo . e grazie :-) – joe

2

io soluzione supporto di Eugenio, ma si potrebbe gruppo le use dichiarazioni nei file di argomento, come:

package Math; 

use ModMatrix; 
use ModFourier; 
... 

E naturalmente dovresti nominare i moduli e le mod-collezioni significative.

1

Mettere tutte le istruzioni di utilizzo in un file separato come suggerito da eugene è probabilmente l'approccio migliore. puoi minimizzare la digitazione in quel modulo con un po 'di meta-programmazione:

package Mods; 
require Exporter; 
our @ISA = 'Exporter'; 

my @packages = qw/Mod1 Mod2 Mod3 .... /; 
    # or map {"Mod$_"} 1 .. 100 if your modules are actually named that way 

for (@packages) { 
    eval "require $_" or die [email protected]; # 'use' means "require pkg; pkg->import()" 
    $_->import();     # at compile time 
} 

our @EXPORT = grep {*{$Mods::{$_}}{CODE}} keys %Mods::; # grab imported subs 
#or @EXPORT_OK