Где мне разместить код, общий для двух модулей Perl? - PullRequest
2 голосов
/ 10 ноября 2010

Я создаю несколько модулей Perl, которые будут использовать общие утилиты для открытия и закрытия файлов.

Например,

mod1.pm

my $in, $out;

sub openf {
    my $fname = shift;
    open $in, "<",  $fname or die $!;
}

sub one {
    openf($path);
    ...
}

mod2.pm

my $in, $out;

sub openf {
    my $fname = shift;
    open $in, "<",  $fname or die $!;
}

sub two {
    openf($path);
    ...
}

Теперь, куда мне положить openf, чтобы код не дублировался?

1 Ответ

9 голосов
/ 10 ноября 2010

Я бы сказал, воспользуйтесь самым простым решением.

Создайте третий модуль, Common.pm или Helpers.pm или MyUtils.pm, - сохраните там все стандартные вспомогательные подпрограммы.

Затем вы импортируете его из обоих вышеуказанных модулей, а также из любого другого места.

Несколько иной подход - вместо простого use -ing Commmon.pm - на самом деле наследовать все ваши модули из него.Таким образом, они могут расширять общие утилиты по мере необходимости в режиме OO.

Мы фактически сделали это с большим проектом, подклассируя почти 100% модулей из BaseClass.pm или BaseClassPlus.pm, который был его подклассом,Работал очень хорошо и был очень проводимым для хорошо обслуживаемого кода благодаря значительно меньшему количеству шаблонов.(У меня есть ощущение, что мы могли бы выполнить большую часть работы с Moose, но это было еще до того, как я узнал, что Moose существует)

...