Должен ли я изменить мой utilities.pl на модуль utilities.pm? - PullRequest
6 голосов
/ 09 октября 2008

В нашем продукте у нас есть большой файл утилит, который нам требуется (с do) в начале многих наших файлов. Есть ли причина , а не , чтобы превратить это в модуль? Например, вместо этого:

do '../dbi_utilities.pl';
our ($db,$user,$pw,$attr);
my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr";

Разве я не могу просто сделать это?:

use AppUtil;
my $Data = AppUtil->connect();

Ответы [ 5 ]

8 голосов
/ 09 октября 2008

Единственная причина не делать этого - время.

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

Теперь это будет стоить вам больше времени, чем будет компенсировано, если вы начнете использовать надлежащие тесты («make test» или «./Build test» или просто «доказывать ...») и сможете проверить что ваши изменения ничего не сломают, прежде чем регистрировать это. Так что, во что бы то ни стало, конвертируйте. Просто знайте, что это не бесплатная выгода.

7 голосов
/ 09 октября 2008

Превратив свой код в модуль с надлежащим рефакторингом, вы упростите его тестирование. Я говорю об этом в моей статье «Сценарии как модули» для The Perl Journal , а также «Как скрипт становится модулем» в Perlmonks.

Удачи,

6 голосов
/ 09 октября 2008

С помощью do () вы каждый раз загружаете и компилируете файл utilities.pl, что может вызвать проблемы, если вы делаете () его более одного раза. Кроме того, use выполняется при компиляции, что позволит вашей программе быстрее завершиться сбоем или даже протестироваться с perl -wc.

И, наконец, хранение его в пакете позволяет защитить его пространство имен, что может оказаться полезным по мере роста вашего проекта.

Я бы настоятельно рекомендовал превратить ваш utilites.pl в правильный пакет Perl, который загружен с use.

2 голосов
/ 09 октября 2008

Создание модуля из него сделает его намного более надежным. Сейчас многие вещи неофициально зависят друг от друга, но эти зависимости не сразу очевидны.

Кроме того, это позволит вам импортировать только часть утилит.

1 голос
/ 09 октября 2008

Вы получаете все классные вещи модуля, инкапсуляцию, специфические функции модуля и т. Д.

Обратите внимание, используя use с вашим синтаксисом. создание объекта для пространства имен AppUtil и вызов подпрограммы connect. для ваших коммунальных услуг.

Также у вас должно быть 1; в конце вашего файла.


Использование другого метода означает, что вам не нужно менять код, вам не нужно добавлять 1 в конце.

Все импорты "do", "use" и "require", но код области действия, который находится внутри них (кроме именованных подпрограмм, поскольку они не могут быть скрыты).

...