Как я должен организовать много модулей Perl?

Полагайте, что у меня есть 100 модулей Perl в 12 каталогах. Но, изучая основной сценарий Perl, это похоже 100 use p1 ; use p2 ; и т.д. Что к лучшему способу решить эту проблему?

10
задан Kevin Panko 7 May 2010 в 14:57
поделиться

4 ответа

Мне кажется маловероятным, что вы re используйте все 100 модулей прямо в вашей основной программе. Если ваша программа использует функцию в модуле A, которая затем вызывает функцию из модуля B, но сама основная программа ни на что не ссылается в модуле B, тогда программа должна только использовать A . Он не должен использовать B , если он напрямую не вызывает что-либо из модуля B.

Если, с другой стороны, ваша основная программа действительно взаимодействует напрямую со всеми 100 модулями, то, вероятно, она просто слишком велика. Определите различные функциональные группы в программе и разбейте каждую из этих групп на отдельный модуль. Основная причина этого заключается в том, что это приведет к тому, что код станет более удобным в обслуживании, гибким и многоразовым, но он также будет иметь счастливый побочный эффект в виде уменьшения количества модулей, с которыми основная программа общается напрямую, что сокращает вниз по количеству операторов использования , необходимых в любом месте.

(И, да, я понимаю, что 100, вероятно, было преувеличением, но, если вам неудобно, что количество модулей , используйте d в вашем коде, то это обычно явный признак что рассматриваемый код пытается сделать слишком много в одном месте и должен быть разбит на набор модулей.)

8
ответ дан 3 December 2019 в 22:35
поделиться

Поместите все use утверждения в один файл, скажем Mods.pm:

package Mods;

use Mod1;
use Mod2;
...

и включите файл в ваш основной скрипт:

use Mods;
4
ответ дан 3 December 2019 в 22:35
поделиться

Я поддерживаю решение Евгения, но вы можете сгруппировать операторы use в файлах по темам, например:

package Math;

use ModMatrix;
use ModFourier;
...

И, конечно же, вы следует называть модули и коллекции модов осмысленными.

2
ответ дан 3 December 2019 в 22:35
поделиться

Размещение всех операторов use в отдельном файле, как предложил eugene y, вероятно, лучший подход. Вы можете минимизировать набор текста в этом модуле с помощью метапрограммирования:

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
1
ответ дан 3 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: