Какие модули распространяются с Perl? - PullRequest
12 голосов
/ 21 февраля 2009

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

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

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

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

И: Как узнать, с какими модулями распространялись:

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

  • Mac OS X?

  • Solaris

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

ТИА.

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

Ответы [ 8 ]

15 голосов
/ 21 февраля 2009

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

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

9 голосов
/ 21 февраля 2009

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

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

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

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

и это для Module :: Build

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

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

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

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

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

8 голосов
/ 21 февраля 2009

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

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

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

Всего самого наилучшего,

Пол

6 голосов
/ 20 марта 2009

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

 cpan -a

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

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

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

Удачи,

1 голос
/ 20 марта 2009

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

0 голосов
/ 20 марта 2009

Этот вопрос теперь немного менее важен (у меня есть доступ с правами 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.

0 голосов
/ 21 февраля 2009

Простая ссылка на это в Приложении 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

0 голосов
/ 21 февраля 2009

посмотрите в своей главной таблице символов, она покажет вам все «стандартные» пакеты, доступные ...

print %main::;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...