En plus d'essayer
perldoc <module name>
individuellement pour tout module CPAN qui me plaît ou qui passe par le système de fichiers et en regardant les répertoires, je n'ai aucune idée des modules que nous avons installés.
Quel est le moyen le plus simple d'obtenir une grande liste de tous les modules CPAN installés? Depuis la ligne de commande ou autrement.
cpan -l
utile pour moi sur Windows.instmodsh
Réponses:
Cette question est répondue dans la FAQ Perl, la réponse qui peut être trouvée rapidement avec
perldoc -q installed
. En bref, il s'agit d'utiliserExtUtils::Installed
ou d'utiliser desFile::Find
variantes des deux qui ont été couvertes précédemment dans ce fil.Vous pouvez également trouver l'entrée FAQ "Comment trouver les modules installés sur mon système?" dans perlfaq3. Vous pouvez voir une liste de toutes les réponses à la FAQ en regardant dans perlfaq
la source
ExtUtils::Installed
constructeur àskip_cwd
partir de cette ligne de commande?cpan -l
mais cela ne fonctionne pas sur RHEL6 et/usr/bin/cpan -l
renvoie l'erreurUnknown option: l
.Edit: Il y a un (peu) plus d'informations à ce sujet dans la FAQ CPAN
la source
perldoc -q installed
prétend que
cpan -l
cela fera l'affaire, mais cela ne fonctionne pas pour moi. L'autre option:cpan -a
crache une belle liste de paquets installés et a le bon effet secondaire de les écrire dans un fichier.
la source
cpan -l
fonctionne (ou fait pour moi avec CPAN v2.05).cpan -a
est en effet plus jolie.Il est à noter que perldoc perllocal ne rapportera que les modules installés via CPAN. Si quelqu'un installe les modules manuellement, il ne les trouvera pas. De plus, si plusieurs personnes installent des modules et que le perllocal.pod est sous contrôle de code source, les utilisateurs peuvent résoudre les conflits de manière incorrecte et corrompre la liste (cela s'est produit ici au travail, par exemple).
Malheureusement, la solution semble parcourir @INC avec File :: Find ou quelque chose de similaire. Cependant, cela ne permet pas seulement de trouver les modules, mais également les modules associés dans une distribution. Par exemple, il rapporterait TAP :: Harness et TAP :: Parser en plus du nom de distribution réel de Test :: Harness (en supposant que vous ayez la version 3 ou supérieure). Vous pourriez potentiellement les faire correspondre avec les noms de distribution et ignorer les noms qui ne correspondent pas, mais vous pourriez alors supprimer les modules construits et installés localement.
Je crois que le travail d'indexation de backpan de brian d foy est censé avoir du code à disposition dans le fichier .pm et il tentera de déduire la distribution, mais même cela échoue parfois parce que ce qui est dans un package n'est pas nécessairement installé (voir Devel :: Cover :: Inc pour un exemple).
la source
$ 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"
la source
No documentation found for "perllocal".
Vous pouvez essayer ExtUtils-Installed , mais cela ne regarde que dans
.packlist
s, donc il peut manquer des modules dans lesquels les gens ont déplacé les choses à la@INC
main.J'ai écrit App-Module-Lister pour un ami qui voulait faire cela en tant que script CGI sur un compte d'hébergement Web non shell. Il vous suffit de prendre le fichier du module et de le télécharger sous un nom de fichier que votre serveur traitera comme un script CGI. Il n'a pas de dépendances en dehors de la bibliothèque standard. Utilisez-le tel quel ou volez le code.
Il sort une liste des modules et de leurs versions:
Je voulais ajouter cela en tant que fonctionnalité à l'
cpan
outil, alors je le ferai aussi. [Le temps passe] Et maintenant j'ai un-l
interrupteurcpan
. J'ai quelques autres choses à faire avec avant de faire une sortie, mais c'est dans github . Si vous ne voulez pas attendre cela, vous pouvez simplement essayer le-a
commutateur pour créer un groupage automatique, bien que cela place un pod dans la liste.Bonne chance;
la source
Voici un script qui ferait l'affaire:
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
la source
Perl - 5.10.1
modules ne sont pas répertoriés.J'aime utiliser la commande CPAN «r» pour cela. Vous pouvez entrer dans le shell CPAN avec l'ancien style:
ou, sur la plupart des systèmes plus récents, il existe une commande 'cpan', donc cette commande vous mènera au shell:
(Vous devez généralement utiliser 'sudo' pour l'exécuter en tant qu'utilisateur root, ou utiliser 'su -' pour devenir root avant de l'exécuter, sauf si vous avez configuré cpan pour vous permettre de l'exécuter en tant qu'utilisateur normal, mais de l'installer en tant qu'utilisateur root. Si vous n'avez pas de root sur cette machine, vous pouvez toujours utiliser le shell CPAN pour trouver ces informations, mais vous ne pourrez pas installer de modules, et vous devrez peut-être effectuer un peu de configuration la première fois que vous exécuter.)
Ensuite, une fois que vous êtes dans le shell cpan, vous pouvez utiliser la commande 'r' pour signaler tous les modules installés et leurs versions. Donc, à l'invite «cpan>», tapez «r». Cela listera tous les modules installés et leurs versions. Utilisation '?' pour obtenir plus d’aide.
la source
sudo
ici? C'est complètement inutile.Voici une façon vraiment pirate de le faire dans * nix, vous obtiendrez des choses dont vous ne vous souciez pas vraiment (par exemple: warnings :: register etc.), mais cela devrait vous donner une liste de tous les fichiers .pm accessibles via perl.
for my $path (@INC) { my @list = `ls -R $path/**/*.pm`; for (@list) { s/$path\///g; s/\//::/g; s/\.pm$//g; print; } }
la source
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
la source
*.pm
module. Vous pouvez voir de nombreux doublons ...Vous pouvez obtenir la liste des modules perl installés dans votre système en utilisant la
instmodsh
commande dans votre terminal.Il vous demandera trois options afin d'améliorer la sortie qu'ils sont:l - List all installed modules m <module> - Select a module q - Quit the program
la source
Sous Linux / Unix, j'utilise cette commande simple:
perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );'
Il scanne tous les dossiers
@INC
et recherche tout fichier * .pm.la source
Essayez la commande suivante
instmodsh
la source
La réponse peut être trouvée dans la liste des FAQ Perl .
Vous devriez parcourir l'excellente documentation fournie avec Perl
la source
Essayez
man perllocal
ouperldoc perllocal
.la source
J'ai écrit un script perl hier pour faire exactement cela. Le script renvoie la liste des modules Perl installés dans @INC en utilisant le '::' comme séparateur. Appelez le script en utilisant -
OU
perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)
À partir de maintenant, le script ignore le répertoire actuel ('.') Car j'avais des problèmes avec les liens logiciels récurrents, mais vous pouvez l'inclure en modifiant la fonction grep à la ligne 17 de
grep { $_ !~ '^\.$' } @INC
pour juste,
Le script peut être trouvé ici.
la source
Voici encore un autre outil de ligne de commande pour répertorier tous les fichiers .pm installés:
Rechercher les modules Perl installés correspondant à une expression régulière
la source
Pour parcourir les arborescences de répertoires @INC sans utiliser un programme externe comme ls (1), on pourrait utiliser le
File::Find::Rule
module, qui a une belle interface déclarative.De plus, vous voulez filtrer les doublons au cas où les versions précédentes de Perl contiendraient les mêmes modules. Le code pour faire cela ressemble à:
#! /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}++; } }
À la fin de l'exécution, vous avez également tous les noms de vos modules sous forme de clés dans le hachage% vu. Le code pourrait être adapté pour enregistrer le nom de fichier canonique (donné dans $ file) comme valeur de la clé au lieu d'un nombre de fois vu.
la source
Ce qui suit a fonctionné pour moi.
$ perldoc perllocal | grep Module $ perldoc perllocal | grep -E 'VERSION|Module'
la source
Tous ceux qui ne peuvent pas installer perldoc, ou d'autres modules, et veulent savoir quels modules sont disponibles (CPAN ou autre), les suivants fonctionnent pour linux et Mingw32 / 64:
grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq
Oui, c'est compliqué. Oui, il en rapporte probablement plus que vous ne le souhaitez. Mais si vous le dirigez dans un fichier, vous pouvez facilement vérifier, par exemple, quelles interfaces dbm sont présentes:
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;
C'est pourquoi je me suis retrouvé sur cette page (déçu)
(Je me rends compte que cela ne répond pas exactement à la question du PO, mais je la poste pour quiconque s'est retrouvé ici pour la même raison que moi. C'est le problème avec stack *** il est presque impossible de trouver la question que vous demander, même s'il existe, mais stack *** est presque toujours le premier succès de Google!)
la source
le livre de recettes Perl contient plusieurs itérations d'un script "pmdesc" qui fait ce que vous voulez. Recherchez "Perl Cookbook pmdesc" sur Google et vous trouverez des articles sur d'autres sites de questions-réponses , plusieurs listes de codes sur le net, une discussion sur la solution et même quelques améliorations .
la source
Voici un one-liner Perl qui imprimera une liste des modules installés:
perl -MExtUtils::Installed -MData::Dumper -e 'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'
Assurez-vous simplement que Data :: Dumper est installé.
la source
Les utilisateurs Windows effectuent simplement une recherche dans l'Explorateur Windows pour le trouver.
la source
Essayez "perldoc -l":
$ perldoc -l Log :: Dispatch /usr/local/share/perl/5.26.1/Log/Dispatch.pm
la source
Voici un script de @ JamesThomasMoon1979 réécrit en une seule ligne
perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); print "$_ ".$i->version($_)."\n" for $i->modules();'
la source
Lorsque vous entrez votre script Perl, vous avez tous les modules installés sous forme de fichiers .pm sous les dossiers de @INC, donc un petit script bash fera le travail pour vous:
#!/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
la source
find `perl -le'print for@INC'` -name '*.pm'
Pour Linux, le moyen le plus simple d'obtenir est,
dpkg -l | grep "perl"
la source
Cela fonctionne pour moi
perl -e 'print join("\n",@INC,"")'
la source
Voici ce que je fais:
perl -M{cpan_module}
si vous ne recevez aucune erreur, il y a de fortes chances que le module soit installé.
la source