Помимо попытки
perldoc <module name>
индивидуально для любого модуля CPAN, который мне нравится, или просматривая файловую систему и глядя на каталоги, я понятия не имею, какие модули мы установили.
Как проще всего получить полный список всех установленных модулей CPAN? Из командной строки или иначе.
cpan -l
что это полезно для себя на окнах.instmodsh
Ответы:
Ответ на этот вопрос можно найти в FAQ по Perl, ответ на который можно быстро найти
perldoc -q installed
. Короче говоря, все сводится к использованиюExtUtils::Installed
или использованиюFile::Find
, варианты обоих из которых были рассмотрены ранее в этой теме.Вы также можете найти раздел часто задаваемых вопросов «Как узнать, какие модули установлены в моей системе?» в perlfaq3. Вы можете увидеть список всех ответов на часто задаваемые вопросы, заглянув в perlfaq
источник
ExtUtils::Installed
конструктораskip_cwd
из этой командной строки?cpan -l
но это не работает на RHEL6 и/usr/bin/cpan -l
вызывает ошибкуUnknown option: l
.Изменить: (немного) больше информации об этом в FAQ по CPAN
источник
perldoc -q installed
утверждает, что это
cpan -l
поможет, но у меня это не работает. Другой вариант:cpan -a
выдает хороший список установленных пакетов и имеет приятный побочный эффект записи их в файл.
источник
cpan -l
работает (или работает для меня с CPAN v2.05).cpan -a
действительно красивее.Стоит отметить, что perldoc perllocal будет сообщать только о модулях, установленных через CPAN. Если кто-то установит модули вручную, он их не найдет. Кроме того, если у вас есть несколько человек, устанавливающих модули, а perllocal.pod находится под контролем источника, люди могут неправильно разрешить конфликты и повредить список (например, это произошло здесь, на работе).
К сожалению, решение, похоже, проходит через @INC с File :: Find или чем-то подобным. Однако это не только позволяет найти модули, но и найти связанные модули в дистрибутиве. Например, он будет сообщать TAP :: Harness и TAP :: Parser в дополнение к фактическому имени распространения Test :: Harness (при условии, что у вас версия 3 или выше). Вы потенциально можете сопоставить их с именами дистрибутивов и отбросить те имена, которые не совпадают, но тогда вы можете отказаться от локально собранных и установленных модулей.
Я считаю, что работа Брайана Ди Фоя по индексированию задней панели должна иметь код для передачи в файле .pm, и он будет пытаться вывести дистрибутив, но даже это иногда терпит неудачу, потому что то, что находится в пакете, не обязательно установлено (см. Devel :: Cover :: Inc для примера).
источник
$ for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort Class::Inspector * "VERSION: 1.28" Crypt::CBC * "VERSION: 2.33" Crypt::Rijndael * "VERSION: 1.11" Data::Dump * "VERSION: 1.22" DBD::Oracle * "VERSION: 1.68" DBI * "VERSION: 1.630" Digest::SHA * "VERSION: 5.92" ExtUtils::MakeMaker * "VERSION: 6.84" install * "VERSION: 6.84" IO::SessionData * "VERSION: 1.03" IO::Socket::SSL * "VERSION: 2.016" JSON * "VERSION: 2.90" MIME::Base64 * "VERSION: 3.14" MIME::Base64 * "VERSION: 3.14" Mozilla::CA * "VERSION: 20141217" Net::SSLeay * "VERSION: 1.68" parent * "VERSION: 0.228" REST::Client * "VERSION: 271" SOAP::Lite * "VERSION: 1.08" Task::Weaken * "VERSION: 1.04" Term::ReadKey * "VERSION: 2.31" Test::Manifest * "VERSION: 1.23" Test::Simple * "VERSION: 1.001002" Text::CSV_XS * "VERSION: 1.16" Try::Tiny * "VERSION: 0.22" XML::LibXML * "VERSION: 2.0108" XML::NamespaceSupport * "VERSION: 1.11" XML::SAX::Base * "VERSION: 1.08"
источник
No documentation found for "perllocal".
Вы можете попробовать ExtUtils-Installed , но он смотрит только в
.packlist
s, поэтому может пропустить модули, в которые люди перемещали вещи@INC
вручную.Я написал App-Module-Lister для друга, который хотел сделать это как сценарий CGI для учетной записи веб-хостинга без оболочки. Вы просто берете файл модуля и загружаете его как имя файла, которое ваш сервер будет рассматривать как сценарий CGI. Он не имеет зависимостей вне стандартной библиотеки. Используйте его как есть или украдите код.
Он выводит список модулей и их версий:
Я хотел добавить это как функцию к
cpan
инструменту, так что я тоже это сделаю. [Время идет] И теперь у меня есть-l
переключательcpan
. У меня есть еще несколько вещей, которые нужно сделать с ним, прежде чем я сделаю релиз, но он находится на github . Если вы не хотите этого ждать, вы можете просто попробовать-a
переключатель для создания автогруппировки, хотя это помещает в список несколько модулей.Удачи;
источник
Вот сценарий, который поможет:
use ExtUtils::Installed; my $inst = ExtUtils::Installed->new(); my @modules = $inst->modules(); foreach $module (@modules){ print $module ." - ". $inst->version($module). "\n"; } =head1 ABOUT This scripts lists installed cpan modules using the ExtUtils modules =head1 FORMAT Prints each module in the following format <name> - <version> =cut
источник
Perl - 5.10.1
Модули не указаны.Мне нравится использовать для этого команду CPAN 'r'. Вы можете попасть в оболочку CPAN в старом стиле:
или, в большинстве новых систем, есть команда cpan, поэтому эта команда приведет вас к оболочке:
(Обычно вам нужно использовать sudo, чтобы запустить его от имени пользователя root, или использовать su -, чтобы стать пользователем root, прежде чем запускать его, если вы не настроили cpan, чтобы вы могли запускать его как обычный пользователь, но устанавливаете как root. Если у вас нет root на этом компьютере, вы все равно можете использовать оболочку CPAN, чтобы узнать эту информацию, но вы не сможете устанавливать модули, и вам, возможно, придется выполнить небольшую настройку при первом запуске. запустить его.)
Затем, войдя в оболочку cpan, вы можете использовать команду 'r', чтобы сообщить обо всех установленных модулях и их версиях. Итак, в приглашении "cpan>" введите 'r'. В нем будут перечислены все установленные модули и их версии. Используйте '?' чтобы получить дополнительную помощь.
источник
sudo
здесь? Это совершенно не нужно.Вот действительно хакерский способ сделать это в * nix, вы получите некоторые вещи, которые вам не нужны (например, warnings :: register и т. Д.), Но он должен дать вам список всех файлов .pm, доступных через perl.
for my $path (@INC) { my @list = `ls -R $path/**/*.pm`; for (@list) { s/$path\///g; s/\//::/g; s/\.pm$//g; print; } }
источник
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
источник
*.pm
модулю. Вы можете увидеть много дубликатов ...Вы можете получить список модулей Perl, установленных в вашей системе, используя
instmodsh
команду в вашем терминале. Она запросит у вас три варианта, чтобы улучшить вывод:l - List all installed modules m <module> - Select a module q - Quit the program
источник
В Linux / Unix я использую эту простую команду:
perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );'
Он сканирует всю папку
@INC
и ищет любой файл * .pm.источник
Попробуйте следующую команду
instmodsh
источник
Ответ можно найти в списке часто задаваемых вопросов Perl. .
Вам следует просмотреть отличную документацию, поставляемую с Perl.
источник
Попробуйте
man perllocal
илиperldoc perllocal
.источник
Буквально вчера я написал Perl-скрипт именно для этого. Сценарий возвращает список модулей perl, установленных в @INC, с использованием символа «::» в качестве разделителя. Вызовите скрипт, используя -
ИЛИ
perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)
На данный момент сценарий пропускает текущий каталог ('.'), Поскольку у меня были проблемы с рекурсивными софт-ссылками, но вы можете включить его, изменив функцию grep в строке 17 из
grep { $_ !~ '^\.$' } @INC
чтобы просто,
Скрипт можно найти здесь.
источник
Вот еще один инструмент командной строки для вывода списка всех установленных файлов .pm:
Найдите установленные модули Perl, соответствующие регулярному выражению
источник
Чтобы пройтись по деревьям каталогов @INC без использования внешней программы, такой как ls (1), можно использовать
File::Find::Rule
модуль с красивым декларативным интерфейсом.Кроме того, вы хотите отфильтровать дубликаты на случай, если предыдущие версии Perl содержат те же модули. Код для этого выглядит так:
#! /usr/bin/perl -l use strict; use warnings; use File::Find::Rule; my %seen; for my $path (@INC) { for my $file (File::Find::Rule->name('*.pm')->in($path)) { my $module = substr($file, length($path)+1); $module =~ s/.pm$//; $module =~ s{[\\/]}{::}g; print $module unless $seen{$module}++; } }
В конце выполнения у вас также будут все имена ваших модулей в качестве ключей в хэше% visible. Код может быть адаптирован для сохранения канонического имени файла (указанного в $ file) в качестве значения ключа, а не количества просмотров.
источник
Следующее сработало для меня.
$ perldoc perllocal | grep Module $ perldoc perllocal | grep -E 'VERSION|Module'
источник
Для всех, кто не может установить perldoc или другие модули и хочет знать, какие модули доступны (CPAN или другие), для linux и Mingw32 / 64 работает следующее:
grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq
Да, это грязно. Да, вероятно, он сообщает больше, чем вы хотите. Но если вы отправите его в файл, вы можете легко проверить, например, какие интерфейсы dbm присутствуют:
grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq > modules-installed cat modules-installed | grep -i dbm AnyDBM_File; Memoize::AnyDBM_File; Memoize::NDBM_File; Memoize::SDBM_File; WWW::RobotRules::AnyDBM_File;
Вот почему я оказался на этой странице (разочарован)
(Я понимаю, что это не совсем ответ на вопрос OP, но я отправляю его для всех, кто оказался здесь по той же причине, что и я. Это проблема со стеком ***, почти невозможно найти вопрос, который вы спрашивает, даже если он существует, но stack *** почти всегда является лучшим хитом Google!)
источник
поваренная книга Perl содержит несколько итераций сценария pmdesc, который делает то, что вы хотите. Выполните поиск в Google по запросу «Perl Cookbook pmdesc», и вы найдете статьи на других сайтах вопросов и ответов , несколько списков кода в сети, обсуждение решения и даже некоторые уточнения .
источник
Вот однострочник Perl, который распечатает список установленных модулей:
perl -MExtUtils::Installed -MData::Dumper -e 'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'
Просто убедитесь, что у вас установлен Data :: Dumper.
источник
Пользователи Windows просто выполняют поиск в проводнике Windows, чтобы найти его.
источник
Попробуйте "perldoc -l":
$ perldoc -l Log :: Dispatch /usr/local/share/perl/5.26.1/Log/Dispatch.pm
источник
Вот сценарий @ JamesThomasMoon1979, переписанный как однострочный
perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); print "$_ ".$i->version($_)."\n" for $i->modules();'
источник
Когда вы вводите свой Perl-скрипт, у вас есть все установленные модули в виде файлов .pm под папками в @INC, поэтому небольшой скрипт bash выполнит эту работу за вас:
#!/bin/bash echo -e -n "Content-type: text/plain\n\n" inc=`perl -e '$, = "\n"; print @INC;'` for d in $inc do find $d -name '*.pm' done
источник
find `perl -le'print for@INC'` -name '*.pm'
Для Linux самый простой способ получить:
dpkg -l | grep "perl"
источник
Это работает для меня
perl -e 'print join("\n",@INC,"")'
источник
Вот что я делаю:
perl -M{cpan_module}
если вы не получаете никаких сообщений об ошибках, велика вероятность, что модуль установлен.
источник