2014-01-27 3 views
5

Я работаю над модулем perl, который я бы хотел отправить в CPAN. Но у меня есть небольшой запрос в отношении структуры каталогов модуля.Структура каталога модуля cpan

В соответствии с perlmonk article модульная структура каталога код должен быть, как показано ниже:

Foo-Bar-0.01/Bar.pm 
    Foo-Bar-0.01/Makefile.PL 
    Foo-Bar-0.01/MANIFEST 
    Foo-Bar-0.01/Changes 
    Foo-Bar-0.01/test.pl 
    Foo-Bar-0.01/README 

Но когда я использую команду, структура формируется как ниже

h2xs -AX Foo::Bar 

    Writing Foo-Bar/lib/Foo/Bar.pm 
    Writing Foo-Bar/Makefile.PL 
    Writing Foo-Bar/README0 
    Writing Foo-Bar/t/Foo-Bar.t 
    Writing Foo-Bar/Changes 
    Writing Foo-Bar/MANIFEST 
+3

Эта статья, на которую вы ссылаетесь, составляет 12 лет. Дело не в том, что h2xs сломан, но практика изменилась со временем. Попробуйте найти Module :: Starter и его средство командной строки для запуска чего-то более современного. –

+3

Эти ссылки могут быть полезны - я уверен, что люди могут предложить и другие. (1) http://perldoc.perl.org/perlnewmod.html (2) http://modernperlbooks.com/books/modern_perl/chapter_09.html - этот второй из бесплатного онлайн-издания «Современный Perl ». Стоит прочитать все это. –

+0

Это больше похоже на новую документацию для создания модулей CPAN perl. Структура, которую вы используете, скорее всего, старая, и есть новая структура каталогов, принятая CPAN или Perl. Если вы не сталкиваетесь с какой-либо проблемой при загрузке/распространении/установке модуля, я думаю, что все должно быть в порядке. http://www.perl.com/pub/2007/08/09/making-perl-modules.html Эта ссылка вам поможет. –

ответ

2

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

Чтобы сломать различия:

  • модули перешли от верхнего уровня до Lib/каталога. Это объединяет место, где живет ваш модуль (т. Е. Место, где вы работаете над кодом и создаете базовые модули для тестирования и в конечном итоге распределяете). Это также упрощает настройку любой требуемой иерархии (например, подклассы или вспомогательные модули); более новая установка просто подберет их. Старший может, но я недостаточно знаком с ним, чтобы сказать «да» или «нет».
  • Makefile.PL в новой настройке будет, когда выполняется «make». создайте библиотеку под названием «blib», * b * uild * lib * rary - вот где код создан для фактического тестирования. Это будет в значительной степени копия lib /, если у вас нет кода XS, и в этом случае это результат скомпилированного кода XS. Это упрощает процесс сборки и тестирования кода; если вы обновите файл в lib /, Makefile перестроит файл в blib, прежде чем пытаться его протестировать.
  • каталог t/заменяет test.pl; «make test» выполнит все * .t-файлы в t /, в отличие от того, что вы должны поместить все свои тесты в test.pl. Это значительно облегчает запись тестов, так как вы можете быть уверены, что в начале каждого теста у вас есть согласованное состояние.
  • МАНИФЕСТ и Изменения в обоих случаях: МАНИФЕСТ (созданный «make manifest») используется для определения того, какие файлы в библиотеке сборки должны быть перераспределены, когда модуль упакован для загрузки и используется для проверки того, что пакет когда он загружен и распакован для строительства. Изменения - это просто журнал изменений, который вы вручную редактируете для записи изменений, сделанных в каждой версии , распространяемой.

Как было рекомендовано в комментариях по вашему вопросу, используя модуль :: Starter или Dist :: Zilla (имейте в виду, что Dist :: Zilla является Лось на основе и установит много из PreReqs) является лучшим подход к созданию модулей более современным образом. Из двух, версия h2xs ближе к современным стандартам упаковки, но вам действительно лучше использовать один из рекомендуемых вариантов стартового пакета (и, возможно, Module :: Build, который использует скрипт Build Perl вместо Makefile для постройте код).

Смежные вопросы