2010-05-07 24 views

回答

8

我認爲你不可能直接在你的主程序中使用所有100個模塊。如果你的程序在模塊A中使用了一個函數,然後它從模塊B調用一個函數,但是主程序本身沒有引用模塊B中的任何東西,那麼程序應該只有use A。它不應該use B,除非它直接調用模塊B的任何東西。

另一方面,如果您的主程序確實直接與所有100個模塊進行對話,那麼它可能只是太大了。識別程序中的不同功能組,並將每個組分解到其自己的模塊中。這樣做的主要原因是它會導致代碼更易於維護,靈活且可重用,但它也會帶來減少主程序直接與之交談的模塊數量的快樂副作用,從而切割低於任何一個地方所需的use報表數量。 (並且,是的,我意識到100可能是誇張的,但是,如果您對代碼中模塊的數量use d感到不舒服,那麼這通常表明代碼有問題試圖在一個地方做的太多,應該分解成一個模塊集合。)

4

把所有的use語句在一個文件,說Mods.pm:

package Mods; 

use Mod1; 
use Mod2; 
... 

,並在您主腳本文件:

use Mods; 
+0

還可以。有沒有其他辦法可以做到這一點。並感謝:-) – joe 2010-05-07 13:05:24

2

我支持尤金的解決方案,但你可以組use陳述在文件按主題,如:

package Math; 

use ModMatrix; 
use ModFourier; 
... 

當然,並且當然你應該命名模塊和模型集合有意義。

1

把所有的使用語句放在一個單獨的文件中,就像eugene建議的可能是最好的方法。您可以通過一些元編程將該模塊中的鍵入最小化:

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