Oprócz próbowania
perldoc <module name>
indywidualnie dla dowolnego modułu CPAN, który mi się podoba lub przegląda system plików i patrząc na katalogi Nie mam pojęcia, jakie moduły zainstalowaliśmy.
Jaki jest najłatwiejszy sposób uzyskania dużej listy wszystkich zainstalowanych modułów CPAN? Z wiersza poleceń lub w inny sposób.
cpan -l
że jest przydatny dla siebie w systemie Windows.instmodsh
Odpowiedzi:
Odpowiedzi na to można znaleźć w Perl FAQ, odpowiedź, którą można szybko znaleźć za pomocą
perldoc -q installed
. Krótko mówiąc, sprowadza się do używaniaExtUtils::Installed
lub używaniaFile::Find
wariantów obu, które zostały wcześniej omówione w tym wątku.Można również znaleźć wpis w często zadawanych pytaniach „Jak sprawdzić, które moduły są zainstalowane w moim systemie?” w perlfaq3. Możesz zobaczyć listę wszystkich odpowiedzi na często zadawane pytania, zaglądając do perlfaq
źródło
ExtUtils::Installed
konstruktoraskip_cwd
z tego wiersza poleceń?cpan -l
ale to nie działa na RHEL6 i/usr/bin/cpan -l
zgłasza błądUnknown option: l
.Edycja: Jest (trochę) więcej informacji na ten temat w CPAN FAQ
źródło
perldoc -q installed
twierdzi, że
cpan -l
załatwi sprawę, ale nie działa dla mnie. Inna opcja:cpan -a
wypluwa ładną listę zainstalowanych pakietów i ma przyjemny efekt uboczny zapisywania ich do pliku.
źródło
cpan -l
działa (lub działa z CPAN v2.05).cpan -a
jest rzeczywiście ładniejszy.Warto zauważyć, że perldoc perllocal będzie raportować tylko o modułach zainstalowanych przez CPAN. Jeśli ktoś zainstaluje moduły ręcznie, nie znajdzie ich. Ponadto, jeśli masz wiele osób instalujących moduły, a perllocal.pod jest pod kontrolą źródła, ludzie mogą nieprawidłowo rozwiązywać konflikty i uszkodzić listę (zdarzyło się to na przykład w pracy).
Niestety, wydaje się, że rozwiązaniem jest przejście przez @INC z File :: Find lub czymś podobnym. Jednak to nie tylko znajduje moduły, ale także znajduje powiązane moduły w dystrybucji. Na przykład zgłosi TAP :: Harness i TAP :: Parser oprócz rzeczywistej nazwy dystrybucji Test :: Harness (zakładając, że masz wersję 3 lub nowszą). Możesz potencjalnie dopasować je do nazw dystrybucji i odrzucić te, które nie pasują, ale wtedy możesz odrzucać lokalnie zbudowane i zainstalowane moduły.
Uważam, że praca indeksowania backpan Briana d foy powinna mieć kod do przekazania go w pliku .pm i będzie próbował wywnioskować dystrybucję, ale nawet to czasami kończy się niepowodzeniem, ponieważ zawartość pakietu niekoniecznie jest zainstalowana (zobacz Devel :: Cover :: Inc).
źródło
$ 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"
źródło
No documentation found for "perllocal".
Możesz wypróbować ExtUtils-Installed , ale wygląda to tylko w
.packlist
s, więc może brakować modułów, do których ludzie przenosili rzeczy@INC
ręcznie.Napisałem App-Module-Lister dla znajomego, który chciał to zrobić jako skrypt CGI na koncie hostingowym innym niż powłoka. Wystarczy pobrać plik modułu i przesłać go jako nazwę pliku, którą serwer będzie traktował jako skrypt CGI. Nie ma żadnych zależności poza biblioteką standardową. Użyj go bez zmian lub ukradnij kod.
Wyświetla listę modułów i ich wersji:
Chciałem dodać to jako funkcję do
cpan
narzędzia, więc też to zrobię. [Czas płynie] A teraz mam-l
przełącznikcpan
. Mam kilka innych rzeczy do zrobienia przed wydaniem, ale jest to na githubie . Jeśli nie chcesz na to czekać, możesz po prostu wypróbować-a
przełącznik, aby utworzyć autobundle, chociaż powoduje to umieszczenie niektórych Podów na liście.Powodzenia;
źródło
Oto skrypt, który załatwi sprawę:
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
źródło
Perl - 5.10.1
Moduły nie są wymienione.W tym celu lubię używać polecenia CPAN „r”. Możesz dostać się do powłoki CPAN w starym stylu:
lub, w większości nowszych systemów, istnieje polecenie 'cpan', więc to polecenie przeniesie Cię do powłoki:
(Zwykle musisz użyć 'sudo', aby uruchomić go jako root, lub 'su -', aby zostać rootem przed uruchomieniem go, chyba że masz skonfigurowany cpan, aby umożliwić uruchamianie go jako zwykły użytkownik, ale zainstaluj jako root. Jeśli nie masz roota na tym komputerze, nadal możesz użyć powłoki CPAN, aby znaleźć te informacje, ale nie będziesz w stanie zainstalować modułów i być może będziesz musiał przejść przez trochę konfiguracji za pierwszym razem Uruchom.)
Następnie, gdy jesteś w powłoce cpan, możesz użyć polecenia „r”, aby zgłosić wszystkie zainstalowane moduły i ich wersje. Zatem po znaku zachęty „cpan>” wpisz „r”. Spowoduje to wyświetlenie wszystkich zainstalowanych modułów i ich wersji. Posługiwać się '?' aby uzyskać dodatkową pomoc.
źródło
sudo
tutaj? To zupełnie niepotrzebne.Oto naprawdę hakerski sposób na zrobienie tego w * nix, dostaniesz rzeczy, na których nie zależy (np. Ostrzeżenia :: register itp.), Ale powinno dać ci listę wszystkich plików .pm, które są dostępne przez perl.
for my $path (@INC) { my @list = `ls -R $path/**/*.pm`; for (@list) { s/$path\///g; s/\//::/g; s/\.pm$//g; print; } }
źródło
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
źródło
*.pm
modułu. Możesz zobaczyć wiele duplikatów ...Możesz uzyskać listę modułów perla zainstalowanych w twoim systemie za pomocą
instmodsh
polecenia w terminalu, który zapyta cię o trzy opcje, aby zwiększyć wydajność, którą są:l - List all installed modules m <module> - Select a module q - Quit the program
źródło
W systemie Linux / Unix używam tego prostego polecenia:
perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );'
Skanuje cały folder
@INC
i szuka dowolnego pliku * .pm.źródło
Wypróbuj następujące polecenie
instmodsh
źródło
Odpowiedź można znaleźć na liście często zadawanych pytań Perla .
Powinieneś przejrzeć doskonałą dokumentację dostarczoną z Perlem
źródło
Spróbuj
man perllocal
lubperldoc perllocal
.źródło
Właśnie wczoraj napisałem skrypt w Perlu, żeby to zrobić. Skrypt zwraca listę modułów perla zainstalowanych w @INC, używając znaku „::” jako separatora. Wywołaj skrypt za pomocą -
LUB
perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)
W tej chwili skrypt pomija bieżący katalog („.”), Ponieważ miałem problemy z cyklicznymi linkami programowymi, ale możesz go dołączyć, zmieniając funkcję grep w linii 17 z
grep { $_ !~ '^\.$' } @INC
po prostu,
Skrypt można znaleźć tutaj.
źródło
Oto kolejne narzędzie wiersza poleceń, które wyświetla listę wszystkich zainstalowanych plików .pm:
Znajdź zainstalowane moduły Perla pasujące do wyrażenia regularnego
źródło
Aby przejść przez drzewa katalogów @INC bez użycia zewnętrznego programu, takiego jak ls (1), można użyć
File::Find::Rule
modułu, który ma ładny deklaratywny interfejs.Ponadto chcesz odfiltrować duplikaty w przypadku, gdy poprzednie wersje Perla zawierają te same moduły. Kod do tego wygląda następująco:
#! /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}++; } }
Pod koniec uruchomienia masz również wszystkie nazwy modułów jako klucze w hashu% seen. Kod można dostosować tak, aby zapisywał kanoniczną nazwę pliku (podaną w $ file) jako wartość klucza zamiast liczby widzianych razy.
źródło
Poniższe zadziałały dla mnie.
$ perldoc perllocal | grep Module $ perldoc perllocal | grep -E 'VERSION|Module'
źródło
Wszyscy, którzy nie mogą zainstalować perldoc lub innych modułów i chcą wiedzieć, jakie moduły są dostępne (CPAN lub inne), poniższe działa dla linuxa i Mingw32 / 64:
grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq
Tak, jest brudny. Tak, prawdopodobnie zgłasza więcej niż chcesz. Ale jeśli umieścisz to potokowo w pliku, możesz łatwo sprawdzić, na przykład, które interfejsy dbm są obecne:
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;
Dlatego znalazłem się na tej stronie (rozczarowany)
(Zdaję sobie sprawę, że to nie odpowiada dokładnie na pytanie OP, ale wysyłam je dla każdego, kto trafił tutaj z tego samego powodu co ja. To jest problem ze stosem *** jest prawie niemożliwe, aby znaleźć pytanie, pytając, nawet jeśli istnieje, ale stack *** jest prawie zawsze największym hitem Google!)
źródło
książka kucharska Perla zawiera kilka iteracji skryptu „pmdesc”, który robi to, co chcesz. Wyszukaj w Google „Perl Cookbook pmdesc”, a znajdziesz artykuły na innych stronach z pytaniami i odpowiedziami , kilka list kodów w sieci, omówienie rozwiązania, a nawet pewne udoskonalenia .
źródło
Oto jednowierszowy Perl, który wydrukuje listę zainstalowanych modułów:
perl -MExtUtils::Installed -MData::Dumper -e 'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'
Upewnij się tylko, że masz zainstalowany Data :: Dumper.
źródło
Użytkownicy systemu Windows po prostu wyszukują go w Eksploratorze Windows, aby go znaleźć.
źródło
Spróbuj „perldoc -l”:
$ perldoc -l Log :: Dispatch /usr/local/share/perl/5.26.1/Log/Dispatch.pm
źródło
Oto skrypt autorstwa @ JamesThomasMoon1979 przepisany jako jednolinijkowy
perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); print "$_ ".$i->version($_)."\n" for $i->modules();'
źródło
Gdy wchodzisz do swojego skryptu Perl, masz wszystkie zainstalowane moduły jako pliki .pm poniżej folderów w @INC, więc mały skrypt bash wykona zadanie za Ciebie:
#!/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
źródło
find `perl -le'print for@INC'` -name '*.pm'
W przypadku Linuksa najłatwiejszym sposobem jest uzyskanie
dpkg -l | grep "perl"
źródło
To działa dla mnie
perl -e 'print join("\n",@INC,"")'
źródło
Oto co robię:
perl -M{cpan_module}
Jeśli nie pojawiły się żadne błędy, istnieje duża szansa, że moduł został zainstalowany.
źródło