perlnewmod
СОДЕРЖАНИЕ
ИМЯ
perlnewmod - подготовка нового модуля для распространения
ОПИСАНИЕ
Этот документ предоставляет некоторые рекомендации по написанию Perl-модулей, подготовке их к распространению и предоставлению их через CPAN.
Одна из вещей, которые делают Perl действительно мощным, заключается в том, что Perl-хакиеры стремятся поделиться решениями проблем, с которыми они столкнулись, чтобы вы и я не сталкивались с теми же проблемами.
Основной способ сделать это – абстрагировать решение в Perl-модуль. Если вы не знаете, что это такое, остальная часть этого документа вам не поможет. Вы также упускаете массу полезного кода; рассмотрите возможность ознакомления с perlmod, perlmodlib и perlmodinstall перед возвращением сюда.
Когда вы обнаружили, что для того, что вы пытаетесь сделать, нет доступного модуля, и вам пришлось написать код самостоятельно, рассмотрите возможность упаковки решения в модуль и загрузки его на CPAN, чтобы другие могли извлечь пользу.
Вы также должны ознакомиться с perlmodstyle, чтобы использовать лучшие практики при создании модуля.
Предупреждение
Здесь мы в основном сосредоточимся на Perl-только модулях, а не на XS-модулях. XS-модули служат совершенно другой цели, и вы должны учитывать различные вещи перед их распространением — популярность библиотеки, которую вы склеиваете, переносимость на другие операционные системы и так далее. Однако заметки о подготовке Perl-части модуля и упаковке и распространении будут одинаково применимы к XS-модулю и чисто Perl-модулю.
Что следует сделать модулем?
Вы должны сделать модуль из любого кода, который, по вашему мнению, может быть полезен другим. Все, что, вероятно, заполнит пробел в общей библиотеке и которое кто-то другой может напрямую вставить в свою программу. Любая часть вашего кода, которую вы можете изолировать, извлечь и подключать к чему-то еще, является потенциальным кандидатом.
Давайте рассмотрим пример. Предположим, вы читаете данные из локального формата в хеш-хешей в Perl, преобразуя его в дерево, проходя по дереву и затем перенаправляя каждый узел на сервер Acme Transmogrifier.
Теперь, довольно много людей используют Acme Transmogrifier, и вам пришлось написать что-то, чтобы говорить по протоколу с нуля — вы, почти наверняка, захотите сделать это модулем. Уровень, на котором вы его разместите, зависит от вас: вы можете захотеть модули уровня протокола, аналогичные Net::SMTP, которые затем взаимодействуют с модулями более высокого уровня, аналогичными Mail::Send. Выбор за вами, но вам нужно создать модуль для этого серверного протокола.
Никто другой на планете не будет говорить на вашем локальном формате данных, поэтому мы можем его игнорировать. Но что насчет той части посередине? Построение структур деревьев из Perl-переменных и их обход — это приятная, общая проблема, и если никто еще не написал модуль, который это делает, вы можете захотеть модулизировать и этот код.
Итак, надеюсь, у вас теперь есть несколько идей о том, что хорошо модулизировать. Давайте теперь посмотрим, как это делается.
Пошаговая инструкция: Подготовка
Прежде чем мы начнем извлекать код, есть несколько вещей, которые мы захотим сделать заранее.
- Обзор
-
Изучите множество модулей, чтобы увидеть, как они написаны. Я бы посоветовал начать с Text::Tabs, поскольку он находится в стандартной библиотеке и достаточно прост, а затем посмотреть на что-то немного более сложное, например, File::Copy. Для объектно-ориентированного кода WWW::Mechanize или
Email::*модули предоставляют хорошие примеры.Они должны дать вам общее представление о том, как выглядят и пишутся модули.
- Проверка новизны
-
На CPAN очень много модулей, и легко упустить из виду модуль, похожий на тот, который вы планируете внести. Хорошенько посмотрите на http://metacpan.org и убедитесь, что вы не изобретаете велосипед!
- Обсуждение необходимости
-
Вам может понравиться. Вам может показаться, что это необходимо всем. Но на самом деле может не быть реального спроса на него. Если вы сомневаетесь в спросе на ваш модуль, обратитесь в
module-authors@perl.orgсписок рассылки (отправьте электронное письмо наmodule-authors-subscribe@perl.orgдля подписки; см. https://lists.perl.org/list/module-authors.html для получения дополнительной информации и ссылки на архивы). - Выбор имени
-
Perl-модули, включенные в CPAN, имеют иерархию имен, к которой вы должны стремиться. См. perlmodlib для получения более подробной информации о том, как это работает, и просмотрите CPAN и список модулей, чтобы получить представление. По крайней мере, помните об этом: модули должны быть заглавными (This::Thing), соответствовать категории и кратко объяснять их назначение.
- Проверка ещё раз
-
Пока вы этим занимаетесь, убедитесь, что не упустили модуль, похожий на тот, который вы собираетесь написать.
Когда вы определились с именем и уверены, что в вашем модуле есть необходимость и что он не доступен в настоящее время, пора начать кодирование.
Пошаговая инструкция: Создание модуля
- Начните с module-starter или h2xs
-
Утилита module-starter распространяется как часть пакета Module::Starter CPAN. Она создает каталог с заглушками всех необходимых файлов для начала нового модуля в соответствии с последними «лучшими практиками» разработки модулей и вызывается из командной строки следующим образом:
module-starter --module=Foo::Bar \ --author="Your Name" --email=yourname@cpan.orgЕсли вы не хотите устанавливать пакет Module::Starter с CPAN, h2xs — это более старая утилита, первоначально предназначенная для разработки XS-модулей, которая поставляется вместе с Perl-распределением.
Типичный вызов h2xs для чисто Perl-модуля:
h2xs -AX --skip-exporter --use-new-tests -n Foo::Bar-Aопускает код Autoloader,-Xопускает XS-элементы,--skip-exporterопускает код Exporter,--use-new-testsустанавливает современную среду тестирования и-nуказывает имя модуля. - Используйте strict и warnings
-
Код модуля должен быть предупреждениями и strict-чистым, так как вы не можете гарантировать условия, в которых он будет использоваться. К тому же вам не захочется распространять код, который не был предупреждениями и strict-чистым, верно?
- Используйте Carp
-
Модуль Carp позволяет представлять ваши сообщения об ошибках с точки зрения вызывающей стороны; это дает вам способ сигнализировать о проблеме вызывающей стороне, а не вашему модулю. Например, если вы скажете это:
warn "No hostname given";пользователь увидит что-то вроде этого:
No hostname given at /usr/local/lib/perl5/site_perl/5.6.0/Net/Acme.pm line 123.что выглядит так, как будто ваш модуль делает что-то неправильно. Вместо этого вы хотите возложить вину на пользователя и сказать это:
No hostname given at bad_code, line 10.Вы делаете это, используя Carp и заменяя ваши
warnнаcarp. Если вам нужноdie, скажитеcroakвместо этого. Однако оставьтеwarnиdieна месте для ваших проверок — где действительно виноват ваш модуль. - Используйте Exporter — разумно!
-
Exporter предоставляет стандартный способ экспорта символов и подпрограмм из вашего модуля в пространство имен вызывающей стороны. Например, сказать
use Net::Acme qw(&frob)импортирует подпрограммуfrob.Переменная пакета
@EXPORTопределит, какие символы будут экспортированы, когда вызывающая сторона просто скажетuse Net::Acme— вам почти никогда не захочется что-либо туда помещать.@EXPORT_OK, с другой стороны, определяет, какие символы вы готовы экспортировать. Если вы хотите экспортировать множество символов, используйте%EXPORT_TAGSи определите стандартный набор экспорта — см. Exporter для получения дополнительной информации. - Используйте простую документацию
-
Работа не закончена до тех пор, пока не будет сделана документация, и вам понадобится время для написания документации вашего модуля.
module-starterилиh2xsпредоставят заготовку для заполнения; если вы не уверены в формате, обратитесь к perlpod для знакомства. Предоставьте хорошее описание того, как используется ваш модуль в коде, описание, а затем заметки о синтаксисе и функции отдельных подпрограмм или методов. Используйте Perl-комментарии для заметок для разработчиков и POD для заметок для конечных пользователей. - Напишите тесты
-
Рекомендуется создавать самотесты для вашего модуля, чтобы убедиться, что он работает так, как задумано, на множестве платформ, поддерживаемых Perl; если вы загрузите свой модуль в CPAN, множество тестировщиков построят ваш модуль и отправят вам результаты тестов. Снова
module-starterиh2xsпредоставляют тестовую среду, которую вы можете расширить — вы должны сделать больше, чем просто проверить, что ваш модуль компилируется. Test::Simple и Test::More — хорошие места для начала написания набора тестов. - Напишите README
-
Если вы загружаете в CPAN, автоматизированные червячки извлекут файл README и поместят его в ваш каталог CPAN. Он также появится в основных каталогах по модулям и по категориям, если вы попадете в список модулей. Хорошо было бы подробно описать, что делает модуль.
- Напишите Изменения
-
Добавьте любые видимые пользователю изменения с момента последнего выпуска в ваш файл Изменения.
Пошаговая инструкция: Распространение вашего модуля
- Получение идентификатора пользователя CPAN
-
Каждый разработчик, публикующий модули на CPAN, нуждается в идентификаторе CPAN. Перейдите на
http://pause.perl.org/, выберите "Запросить учётную запись PAUSE" и дождитесь одобрения вашего запроса администраторами PAUSE. - Создание tar-архива
-
Ещё раз,
module-starterилиh2xsвыполнили всю работу за вас. Они создают стандартныйMakefile.PLфайл, который вы видите при загрузке и установке модулей, а также создают Makefile сdistцелевым заданием.perl Makefile.PL && make test && make distcheck && make distПосле того, как вы убедитесь, что ваш модуль прошёл собственные тесты (всегда стоит убедиться в этом), вы можете выполнить
make distcheck, чтобы убедиться, что всё в порядке, а затемmake dist, и Makefile, надеюсь, создаст для вас хороший tar-архив вашего модуля, готовый к загрузке. - Загрузка tar-архива
-
В письме, которое вы получили при получении вашего идентификатора CPAN, будет указано, как войти в PAUSE, сервер загрузки модулей Perl. Оттуда вы сможете загрузить свой модуль на CPAN.
В качестве альтернативы, вы можете использовать скрипт cpan-upload, являющийся частью дистрибутива CPAN::Uploader на CPAN.
- Исправление ошибок!
-
После того, как вы начнёте накапливать пользователей, они отправят вам сообщения об ошибках. Если вам повезёт, они даже отправят исправления. Добро пожаловать в мир поддержки программных проектов...
АВТОР
Simon Cozens, simon@cpan.org
Обновлено Kirrily "Skud" Robert, skud@cpan.org
См. также
perlmod, perlmodlib, perlmodinstall, h2xs, strict, Carp, Exporter, perlpod, Test::Simple, Test::More ExtUtils::MakeMaker, Module::Build, Module::Starter http://www.cpan.org/
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.36.0/perlnewmod