2010-05-07 10 views

Respuesta

8

Parece poco probable para mí que usted es use ing todos los 100 módulos directamente en el programa principal. Si su programa utiliza una función en el módulo A que luego llama a una función desde el módulo B, pero el programa principal en sí mismo no hace referencia a nada en el módulo B, entonces el programa debería ser solo use A. No debería llamar al use B a menos que llame directamente desde el módulo B.

Si, por otro lado, su programa principal realmente habla directamente con los 100 módulos, entonces es probable que simplemente sea demasiado grande. Identifique diferentes grupos funcionales dentro del programa y divida cada uno de esos grupos en su propio módulo. La razón principal para hacer esto es que resultará en un código que es más fácil de mantener, flexible y reutilizable, pero también tendrá el feliz efecto secundario de reducir el número de módulos con los que el programa principal habla directamente, lo que reduce el número de módulos. abajo en el número de declaraciones use requeridas en cualquier lugar.

(Y, sí, me doy cuenta de que 100 probablemente fue una exageración, pero, si se siente incómodo con el número de módulos que es use d por su código, eso suele indicar que el código en cuestión está tratando de hacer demasiado en un solo lugar y debe ser dividido en un conjunto de módulos.)

4

Poner todas las declaraciones use en un solo archivo, por ejemplo Mods.pm:

package Mods; 

use Mod1; 
use Mod2; 
... 

e incluya el archivo en el script principal:

use Mods; 
+0

todavía está bien. Hay alguna otra forma de hacerlo . y gracias :-) – joe

2

Apoyo la solución de Eugene, pero podría agrupar use las instrucciones de los archivos por tema, como:

package Math; 

use ModMatrix; 
use ModFourier; 
... 

Y, por supuesto debe nombrar los módulos y las colecciones de mod con significado.

1

Poner todas las declaraciones de uso en un archivo separado como Eugene y sugirió es probablemente el mejor enfoque. puede minimizar el tipeo en ese módulo con un poco de metaprogramación:

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 
Cuestiones relacionadas