Как получить список установленных модулей CPAN? - PullRequest
80 голосов
/ 22 сентября 2008

Помимо попыток

perldoc <module name>

индивидуально для любого CPAN-модуля, который мне нравится или проходит через файловую систему и просматривает каталоги, я не знаю, какие модули мы установили

Какой самый простой способ получить большой список всех установленных модулей CPAN? Из командной строки или иным образом.

Ответы [ 27 ]

5 голосов
/ 30 января 2013
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
2 голосов
/ 30 января 2013

Попробуйте следующую команду

instmodsh

2 голосов
/ 01 июня 2009

Попробуйте man perllocal или perldoc perllocal.

2 голосов
/ 31 мая 2009

Ответ можно найти в списке Perl FAQ .

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

perldoc perltoc
1 голос
/ 31 мая 2009

Я написал скрипт на Perl только вчера, чтобы сделать именно это. Скрипт возвращает список модулей Perl, установленных в @INC, используя «::» в качестве разделителя. Вызовите скрипт, используя -

perl perlmod.pl

ИЛИ

perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)

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

  grep { $_ !~ '^\.$' } @INC

до

@INC

Сценарий можно найти здесь .

1 голос
/ 14 ноября 2009

Вот еще один инструмент командной строки для просмотра списка всех установленных файлов .pm:

Поиск установленных модулей Perl, соответствующих регулярному выражению

  • Переносной (используются только основные модули)
  • Опция кэширования для быстрого поиска
  • Настраиваемые параметры отображения
1 голос
/ 23 сентября 2008

Чтобы пройтись по деревьям каталогов @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}++;
    }
}

В конце цикла у вас также будут все имена модулей в качестве ключей в% увиденного хэша. Код может быть адаптирован для сохранения канонического имени файла (заданного в $ file) в качестве значения ключа вместо числа увиденных раз.

1 голос
/ 29 сентября 2018

В Linux / Unix я использую эту простую команду:

perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );' 

Сканирует все папки в @INC и ищет любой файл * .pm.

1 голос
/ 18 августа 2011

Вот Perl с одним вкладышем, который распечатает список установленных модулей:

perl -MExtUtils::Installed -MData::Dumper -e  'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'

Просто убедитесь, что у вас установлен Data :: Dumper.

0 голосов
/ 09 мая 2018

Это работает для меня

perl -e 'print join("\n",@INC,"")'
...