Как я могу узнать, какие модули были изначально предоставлены для конкретной установки Perl на компьютере? - PullRequest
7 голосов
/ 18 января 2010

Как узнать, какие модули были изначально предоставлены для конкретной установки Perl на компьютере?

(Это , а не , дубликат: Как узнать, еслиМодуль Perl является ядром или частью стандартной установки? («Как я могу определить, является ли модуль Perl ядром или частью стандартной установки?») - это фактически побочный вопрос от него)

Я ищу что пришло с установкой изначально , какие модули были предоставлены как часть этой установки, что было встроено.НЕ то, что было установлено с тех пор.

Я бы хотел, чтобы это работало с любой версией Perl.

Я хочу иметь возможность сделать это:

  • с использованием скриптавнутри самой Perl-программы / команды на компьютере , на котором установлена ​​программа.Поэтому для этого я бы полагался на установку, чтобы иметь в некоторой форме запись о том, что он имеет изначально.
  • в загруженном пакете перед установкой.Спросите его, какие у него есть модули.

Причины, по которым я хочу это сделать:

  • Я хочу знать, какие модули можно ожидать по умолчанию при написании программного обеспечения длязапустить на машине с установкой Perl, и какие модули мне нужно добавить, которые не являются значениями по умолчанию
  • , если я сохраняю исходный образ / пакет установщика ИЛИ знаю, как снова получить нужную вещь в сети, тогда яиметь повторяемую согласованную установку Perl для нескольких машин, зная, какие модули будут присутствовать, а какие нет.
  • мое ПО Perl будет иметь четко определенную процедуру развертывания, так как легко будет точно определить, что требуетсяпрограммным обеспечением
  • Возможно, я не смогу просто легко обновить / обновить версию Perl из-за политик, действующих в моей организации (так оно и есть, я не хочу дополнительного обсуждения этого вопроса),Такая политика может быть оправдана, поскольку всегда существует риск обновления до нового программного обеспечения, которое может перевесить преимущества.Поэтому разработчики должны знать, что они могут ожидать, чтобы быть доступными.

Причина, по которой я задаю этот вопрос, заключается в том, что для любой версии Perl, по-видимому, не существует автоматического способа определения общегостандартная установка, определяющая, какие модули вы можете ожидать при установке по умолчанию на вашем компьютере - см. вопрос: Как определить, является ли модуль Perl основным или частью стандартной установки? ("Как я могусказать, является ли модуль Perl ядром или частью стандартной установки? ")

Нельзя полагаться на версии Perl, чтобы сказать, какие модули присутствуют или нет.Конечно, в Интернете может быть документация, в которой вам сообщают.Но мне нужен автоматизированный способ сделать это в той версии, которую я загружаю / устанавливаю.Даже одна и та же версия Perl в разных дистрибутивах Linux / Unix может отличаться.

Ответы [ 3 ]

6 голосов
/ 18 января 2010

Для Debian или Ubuntu вы можете использовать

$ dpkg --listfiles perl | grep '\.pm$'

Для Redhat:

$ rpm -ql perl | grep '\.pm$'
6 голосов
/ 18 января 2010

В общем, вы не можете. У вас будет гораздо меньше разочарований, если вы примете это и подойдете к проблеме с другой стороны. Module :: CoreList предоставляет список того, что должно быть включено во все установки как минимум, но поставщики не обязаны придерживаться этого, и большинство дистрибутивов включают много модулей, которые не ' т часть ядра. Запрет на создание собственной базы данных о том, что было включено в какую версию каждого дистрибутива - непростая задача - надежды не так много. Обратите внимание, что даже для модулей, поставляемых с дистрибутивом, установленная версия может отличаться.

Я вижу несколько разных способов подойти к этому:

  1. Если вы знаете свою цель во время разработки (например, конкретный версия ActivePerl) вы можете принимать решения на основе этого.
  2. В общем случае разверните ваше приложение как модуль и укажите зависимостей. например используйте Module :: Build и перечислите предпосылки в requires раздел скрипта Build.pl. Оболочка cpan может следовать и разрешать зависимости автоматически.
  3. Если вы хотите полностью обойти проблему, используйте PAR и Par :: Packer для создавать автономные пакеты развертывания.
0 голосов
/ 18 января 2010

ищу что пришло с установка изначально, какие модули были предоставлены как часть этого установка, что было встроено. НЕ что было установлено с тех пор.

Возможно, для неосновных модулей вы можете проанализировать perllocal.pod, отделяя начальную партию модулей, установленных вместе с самой установкой Perl, от более поздних, основанных на дате. Вы ищете строки, такие как:

=head2 Wed Apr 30 15:40:38 2008: C<Module> L<URI|URI>

Таким образом, первые несколько, вероятно, будут теми, которые были установлены с самим Perl и должны иметь одинаковую дату (хотя, конечно, не в одно и то же время). Те, которые установлены с разницей в 24 часа и более, будут тем, что вы ищете.

Не уверен насчет основных модулей, так как, по моему мнению, ответы, которые вы получили в предыдущем вопросе, на который вы ссылались, были удовлетворительными, но, очевидно, вы так не думали. Вероятно, я что-то упустил :)

Cheers, Предложение

...