2009-02-20 4 views
12

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

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

Так уточнить мой вопрос немного:

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

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

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

  • Mac OS X?

  • Solaris?

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

TIA.

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

ответ

6

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

cpan -a 

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

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

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

Успехов,

+0

Я не использовал cpan -a (см. Мой собственный ответ, который был изменен внизу для взлома, который я действительно использовал). Если бы вы ответили месяц назад, я бы ответил, поэтому я отмечу это как правильный ответ! Благодарю. Я был уверен, что должен быть способ, и это будет полезной информацией для будущего. –

-6

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

print %main::; 
+0

Это * не * показать все модули распределены, только те, которые были собраны. Также он показывает все виды других вещей. –

15

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

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

+2

Хотя это должен быть правильный ответ, на практике поставщики делают странные вещи, когда они строят Perl. Нам понадобятся модули, такие как Module :: CoreList :: Debian и т. Д. :) –

0

Простая ссылка для этого находится в Appendix D из книги Beginning 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. вот list for perl 5.8.8

8

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

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

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

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

Пол

9

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

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

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

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

и это для модуля :: Строить

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

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

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

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

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

+0

Я добавлю немного больше подробностей к вопросу. –

+0

Спасибо, теперь я вижу, что такое правильный вопрос. :) – Schwern

+0

Спасибо, я действительно хочу избежать установки каких-либо модулей, даже локально, если я могу помочь, потому что это кажется более трудным, чем его ценность, учитывая сочетание платформ и отсутствие компилятора на одном из них (и у меня нет много времени для этой работы). Поэтому я действительно хочу использовать то, что установлено и/или чистым perl. –

-1

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

Первого , запустите этот код в каждой из целевых систем:

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 

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

Для чего все эти три системы совместно используют несколько дополнительных модулей, в частности модули XML :: Parser.

+1

Что получает список модулей, разделяемых между отдельными машинами, но он не говорит, что приходит с Perl. Поставщики ОС добавляют больше модулей. Sysadmins устанавливают больше как из пакетов, так и из CPAN. Вы можете немного распутать это. Посмотрите на «perl» и «vendor» каталоги lib. Но его так не стоит. – Schwern

+0

Установка модулей как root - это не очень хорошая идея. Если вы действительно не хотите делиться этими модулями для нескольких пользователей системы. Для одного пользователя локальная установка модулей в каталоге под домашним каталогом, как правило, достаточно и безопасна, так как она не рискует повредить файлы, управляемые системной упаковкой. – dolmen

1

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

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