Подтвердить что ты не робот

Какие модули распространяются вместе с Perl?

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

Моя первая догадка заключается в том, что основные модули, перечисленные здесь, всегда включены, хотя я не могу найти это явно. Тем не менее, я использовал модули вне этого набора (например, LWP) без необходимости их установки в Mac OS X и Linux.

Итак, чтобы немного уточнить мой вопрос:

  • Какие модули распространяются со всеми установками Perl?

И: Как узнать, какие модули были распределены с помощью:

  • Linux (в частности, Debian/Ubuntu)?

  • Mac OS X?

  • Solaris?

В каждом случае я использую версию Perl, которая поставляется с самой последней версией операционной системы.

ТИА.

Обновление: Причина в том, что я разрабатываю Mac OS X и Linux для развертывания в разных Linux и Solaris, и у меня нет прав на некоторые из этих систем, и в случае Mac OS XI даже нет компилятора AFAIK. Поэтому я хочу знать, какие модули у меня доступны во всех четырех развертываниях без дальнейшей установки.

4b9b3361

Ответ 1

Для быстрого просмотра модулей и версий, которые вы установили, используйте инструмент cpan для создания автооблока:

 cpan -a

ExtUtils:: Installed может помочь вам, если вам нужно что-то более сложное.

Раньше существовала идея "стандартной библиотеки", но на самом деле она не существует на самом деле. Module:: CoreList сообщает вам, что находится в "стандартной библиотеке", но многие поставщики устанавливают дополнительные модули, а некоторые даже удаляют или обновляют модули. Кроме того, дистрибутивы, такие как Strawberry Perl и ActivePerl поставляются со многими бонусные модули.

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

Удачи,

Ответ 2

Если вы устанавливаете Module::CoreList, программа командной строки corelist может рассказать вам все о модулях и их версиях в разных версиях Perl. Страница, на которую вы ссылаетесь, дает обзор последней версии perl.

Обратите внимание, что по умолчанию этот дистрибутив обеспечивает гораздо больше, чем этот список, но этот список можно считать присутствующим везде (если он явно не является зависимым от ОС модулем, таким как Win32).

Ответ 3

Правильные прямые ответы уже были даны, но я думаю, что вы задали неправильный вопрос. Вероятно, вы пытаетесь разработать, используя только основные модули. Зачем? Вероятно, вы это делаете, потому что не хотите иметь дело с зависимостями. Зачем? Потому что они могут быть болью в заднице. Но для разработки Perl без CPAN отсутствует половина мощности. Ты сам себя калеча. Это того стоит.

Обновление: Теперь, когда я знаю больше о том, что вы пытаетесь сделать, я могу ответить на правильный вопрос. Во-первых, "как установить модуль, если у меня нет корня?" Простой ответ таков:

perl Makefile.PL PREFIX=/some/path LIB=/some/path/lib
...and all the rest as normal...

для модулей на основе MakeMaker (LIB используется для управления неточным характером PREFIX. INSTALL_BASE предпочтительнее, но он не совместим с обратной связью).

а для модуля:: Build

perl Build.PL --install_base=/some/path

а затем модули закроются в /some/path/lib, и вы можете установить переменную среды PERL5LIB или use lib qw(/some/path/lib) в свой код.

Это означает, что вы можете вставлять зависимые модули прямо в ваше программное обеспечение и отправлять их. Прекрасно работает для модулей pure-Perl. Для материала, требующего компилятора, посмотрите PAR, поскольку другие предложили отправлять компилированные исполняемые файлы.

В качестве альтернативы вы можете распространять свои материалы как модуль CPAN, в комплекте с зависимостями, и разрешить клиенту CPAN их разрешать. Вы можете использовать Module::AutoInstall для выполнения этого процесса за пределами клиента CPAN.

Итак, вы видите, что вы не ограничены использованием только основных модулей при отправке приложения Perl.

Ответ 4

Module::CoreList уже упоминалось. Он поставляется с интерфейсом командной строки, чтобы упростить задачу. Это здорово, если вы уже установили его, или имеете программу, которая должна выяснить, что может не прийти с определенной версией Perl.

Если вы хотите узнать, какие модули поставляются с вашей конкретной версией perl, вы можете запустить perldoc perlmodlib в командной строке для полного списка. Для старых или новых версий Perl вы можете просто перейти на страницу Perl в CPAN и выбрать нужную версию (например, 5.6.2 ) из раскрывающегося списка, а затем перейдите на страницу perlmodlib в документации. (ввод текста perlmodlib в ваш текстовый поиск браузера поможет).

Если вы думаете о том, что не используете модуль, потому что он не является ядром в более старой версии Perl, тогда вы можете рассмотреть возможность использования PAR, Perl Archiver, чтобы связать ваши дополнительные зависимости или даже сам Perl! В Perl Training Australia также есть Perl Tip при использовании PAR, который охватывает основы при начале работы с PAR.

Все самое лучшее,

Пол

Ответ 5

звучит так, как будто вы хотите local::lib. Все преимущества cpan без корня (и оставляет систему perl нетронутой).

Ответ 6

Простая ссылка для этого в Приложение D из книги Начало Perl. Конечно, это относится к Perl 5.6, но, насколько мне известно, Perl 5.8 не удалял ни одного из них и только вводил новые (например, Digest:: MD5, File:: Temp, Filter:: Simple, libnet, List:: Util, Memoize, MIME:: Base64, Scalar:: Util, Storable, Switch, Test:: More, Test:: Simple, Text:: Balanced, Tie:: File и т.д.)

Для каждой версии perl вы можете посмотреть perldoc. вот список для perl 5.8.8

Ответ 7

Этот вопрос сейчас немного менее важен (у меня есть root-доступ на конечном целевом компьютере, поэтому я просто буду устанавливать нужные мне пакеты), но в случае, если кто-то заинтересован здесь, что я сделал:

Сначала запустите этот код в каждой из целевых систем:

foreach my $dir (@INC) {
    print "Directory: $dir\n";
    if (-d "$dir") {
        my @modules = `find $dir/ -name "*.pm"`;
        foreach my $m (@modules) {
            my $label = $m;
            $label =~ s|\n$||;
            $label =~ s|//+|/|g;
            $label =~ s|^$dir/||;
            print "$label\n";
        }
    }
}

Обратите внимание, что вам нужна система * nix с командой find. Выгрузите вывод в три файла, отсортированные. Затем используйте такие команды (из памяти):

grep -F -x -f list-1.txt list2.txt > list-12.txt
grep -F -x -f list-12.txt list3.txt > list-123.txt

Теперь list-123.txt должен иметь список разделяемых модулей, более или менее.

Для того, что стоит, все три системы поделились несколькими дополнительными модулями, особенно с модулями XML:: Parser.

Ответ 8

посмотрите в свою основную таблицу символов, она покажет вам все доступные "стандартные" пакеты...

print %main::;