2016-08-18 8 views
2

Просьба перечислить все причины, поддерживающие следующее высказывание: «Каждый пакет Perl следует поместить в отдельный файл (без нескольких пакетов в один файл)».Несколько пакетов Perl в одном файле?

К примеру, у меня есть такой код:

{ 
package Classes::City; 
# ... 
} 
{ 
package Classes::Cities; # for lists of multiple cities 
# ... 
} 

Должен ли я рефакторинг этого кода в двух отдельных .pm файлов? (Рассмотрите этот вопрос как пример вышеупомянутого вопроса, а не как вопрос, основанный на мнениях. Я хочу только аргументы списка, а не мнение, основанное на мнении.)

+0

Откуда вы получили свою цитату? Пожалуйста, добавьте источник. Возможно, это уже указывает на объяснение. Я сейчас думаю о нескольких, но есть исключения. – simbabque

+0

@simbabque Я не помню, где я получил цитату – porton

+0

Пожалуйста, не принимайте мой ответ. Это препятствует другим ответам, и, скорее всего, у кого-то есть больше времени и больше исследований, чтобы дать лучшее, чем мое. – simbabque

ответ

4

Основная причина в том, что Perl загружает модули для вас автоматически, когда вы use или require с именами пакетов. Это делается путем преобразования имени пакета в путь в вашей файловой системе и проверки каждого из ваших каталогов @INC для этого файла.

use Classes::City; 
# will be converted to on Linux: 
Classes/City.pm 

Если у вас есть и классы :: Город и классы :: Город в одном файле, вы не можете загрузить :: Города без загрузки Города, так как файл Классы/Cities.pm не существует нигде в вашем @INC.

use Classes::City 
# blows up 

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

+1

Это делает жизнь ваших пользователей более сложной. Что делать, если ваш пользователь получает предупреждение в подпрограмме «Классы :: Города» и хочет посмотреть исходный код? – mob