/ / Jak powinienem zorganizować wiele modułów Perla? - perl, moduł perla

Jak zorganizować wiele modułów Perla? - perl, perl-module

Rozważ, że mam 100 modułów Perla w 12 katalogach. Ale patrząc na główny skrypt Perla, wygląda on jak 100 use p1 ; use p2 ; itd. Jaki jest najlepszy sposób rozwiązania tego problemu?

Odpowiedzi:

8 dla odpowiedzi № 1

Wydaje mi się mało prawdopodobne, że jesteś usewszystkie 100 modułów bezpośrednio w głównym programie. Jeśli twój program używa funkcji w module A, który następnie wywołuje funkcję z modułu B, ale sam program główny nie odwołuje się do niczego w module B, program powinien tylko use A. Nie powinno use B chyba że bezpośrednio wywołuje cokolwiek z modułu B.

Z drugiej strony, jeśli naprawdę jesteś głównym programemrozmawia bezpośrednio ze wszystkimi 100 modułami, to prawdopodobnie jest po prostu zbyt duże. Zidentyfikuj różne grupy funkcjonalne w programie i podziel każdą z tych grup na własny moduł. Głównym powodem jest to, że spowoduje to kod, który jest łatwiejszy w utrzymaniu, elastyczny i wielokrotnego użytku, ale będzie miał również szczęśliwy efekt uboczny polegający na zmniejszeniu liczby modułów, z którymi program główny rozmawia bezpośrednio, zmniejszając w ten sposób liczbę use wymagane oświadczenia w jednym miejscu.

(I tak, zdaję sobie sprawę, że 100 to prawdopodobnie przesada, ale jeśli czujesz się niekomfortowo z powodu liczby modułów used według twojego kodu, to jest zwykle silna wskazówka, że ​​dany kod próbuje zrobić za dużo w jednym miejscu i powinien zostać podzielony na zbiór modułów.)


4 dla odpowiedzi nr 2

Umieść wszystkie use instrukcje w jednym pliku, powiedzmy Mods.pm:

package Mods;

use Mod1;
use Mod2;
...

i dołącz plik do głównego skryptu:

use Mods;

2 dla odpowiedzi nr 3

Popieram rozwiązanie eugene, ale możesz pogrupować use instrukcje w plikach według tematu, takie jak:

package Math;

use ModMatrix;
use ModFourier;
...

I oczywiście powinieneś nazwać moduły i znaczące kolekcje modów.


1 dla odpowiedzi nr 4

Umieszczenie wszystkich oświadczeń dotyczących użycia w osobnym pliku jako sugerowanym przez eugenię jest prawdopodobnie najlepszym podejściem. możesz zminimalizować wpisywanie w tym module za pomocą trochę meta programowania:

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 $@;  # "use" means "require pkg; pkg->import()"
$_->import();                 # at compile time
}

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