Selain mencoba
perldoc <module name>
secara individual untuk setiap modul CPAN yang saya sukai atau melalui sistem file dan melihat direktori Saya tidak tahu modul apa yang telah kami instal.
Apa cara termudah untuk mendapatkan daftar besar dari setiap modul CPAN yang diinstal? Dari baris perintah atau sebaliknya.
cpan -l
berguna untuk diri saya sendiri di windows.instmodsh
Jawaban:
Ini dijawab di Perl FAQ, jawaban yang dapat ditemukan dengan cepat
perldoc -q installed
. Singkatnya, ini tergantung pada penggunaanExtUtils::Installed
atau penggunaanFile::Find
, varian keduanya telah dibahas sebelumnya di utas ini.Anda juga dapat menemukan entri FAQ "Bagaimana cara menemukan modul mana yang diinstal pada sistem saya?" di perlfaq3. Anda dapat melihat daftar semua jawaban FAQ dengan melihat di perlfaq
sumber
ExtUtils::Installed
konstruktorskip_cwd
dari baris perintah itu?cpan -l
tetapi itu tidak berfungsi pada RHEL6, dan/usr/bin/cpan -l
menampilkan kesalahanUnknown option: l
.Sunting: Ada (sedikit) info lebih lanjut tentang itu di FAQ CPAN
sumber
perldoc -q installed
klaim yang
cpan -l
akan melakukan trik, namun itu tidak berhasil untuk saya. Opsi lainnya:cpan -a
tidak memuntahkan daftar paket yang terinstal dan memiliki efek samping yang bagus dari menulisnya ke file.
sumber
cpan -l
bekerja (atau untuk saya dengan CPAN v2.05).cpan -a
memang lebih cantik.Perlu dicatat bahwa perldoc perllocal hanya akan melaporkan modul yang dipasang melalui CPAN. Jika seseorang menginstal modul secara manual, itu tidak akan menemukannya. Selain itu, jika Anda memiliki beberapa orang yang menginstal modul dan perllocal.pod berada di bawah kendali sumber, orang-orang mungkin salah menyelesaikan konflik dan merusak daftar (ini telah terjadi di sini di tempat kerja, misalnya).
Sayangnya, solusi tersebut tampaknya berjalan melalui @INC dengan File :: Find atau yang serupa. Namun, itu tidak hanya menemukan modul, tetapi juga menemukan modul terkait dalam distribusi. Misalnya, ini akan melaporkan TAP :: Harness dan TAP :: Parser selain nama distribusi sebenarnya dari Test :: Harness (dengan asumsi Anda memiliki versi 3 atau lebih tinggi). Anda berpotensi mencocokkannya dengan nama distribusi dan membuang nama yang tidak cocok, tetapi kemudian Anda mungkin membuang modul yang dibuat dan diinstal secara lokal.
Saya percaya pekerjaan pengindeksan backpan brian d foy seharusnya memiliki kode untuk diserahkan pada file .pm dan akan mencoba menyimpulkan distribusinya, tetapi bahkan ini kadang-kadang gagal karena apa yang ada di dalam paket belum tentu diinstal (lihat Devel :: Cover :: Inc misalnya).
sumber
$ 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"
sumber
No documentation found for "perllocal".
Anda dapat mencoba ExtUtils-Installed , tetapi itu hanya terlihat di
.packlist
s, jadi mungkin kehilangan modul yang orang-orang pindahkan ke dalamnya@INC
dengan tangan.Saya menulis App-Module-Lister untuk seorang teman yang ingin melakukan ini sebagai skrip CGI pada akun hosting web non-shell. Anda cukup mengambil file modul dan mengunggahnya sebagai nama file yang akan diperlakukan server Anda sebagai skrip CGI. Itu tidak memiliki ketergantungan di luar Perpustakaan Standar. Gunakan sebagaimana adanya atau curi kodenya.
Ini mengeluarkan daftar modul dan versinya:
Saya sudah lama ingin menambahkan ini sebagai fitur ke
cpan
alat, jadi saya akan melakukannya juga. [Waktu berlalu] Dan, sekarang saya memiliki-l
tombolcpan
. Saya memiliki beberapa hal lain yang harus dilakukan sebelum saya membuat rilis, tetapi ada di github . Jika Anda tidak ingin menunggu itu, Anda bisa mencoba-a
sakelar untuk membuat bundel otomatis, meskipun itu menempatkan beberapa Pod di sekitar daftar.Semoga berhasil;
sumber
Berikut skrip yang akan melakukan trik:
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
sumber
Perl - 5.10.1
Modul tidak terdaftar.Saya suka menggunakan perintah CPAN 'r' untuk ini. Anda bisa masuk ke shell CPAN dengan gaya lama:
atau, pada kebanyakan sistem yang lebih baru, terdapat perintah 'cpan', jadi perintah ini akan membawa Anda ke shell:
(Anda biasanya harus menggunakan 'sudo' untuk menjalankannya sebagai root, atau menggunakan 'su -' untuk menjadi root sebelum Anda menjalankannya, kecuali jika Anda memiliki cpan yang diatur agar Anda dapat menjalankannya sebagai pengguna biasa, tetapi instal sebagai root. Jika Anda tidak memiliki root pada mesin ini, Anda masih dapat menggunakan shell CPAN untuk mengetahui informasi ini, tetapi Anda tidak akan dapat menginstal modul, dan Anda mungkin harus melalui sedikit pengaturan saat pertama kali Anda melakukannya. menjalankannya.)
Kemudian, setelah Anda berada di shell cpan, Anda dapat menggunakan perintah 'r' untuk melaporkan semua modul yang diinstal dan versinya. Jadi, pada prompt "cpan>", ketik 'r'. Ini akan mencantumkan semua modul yang diinstal dan versinya. Gunakan '?' untuk mendapatkan bantuan lebih lanjut.
sumber
sudo
disini? Ini sama sekali tidak perlu.Berikut adalah cara yang benar-benar hack untuk melakukannya di * nix, Anda akan mendapatkan beberapa hal yang tidak terlalu Anda pedulikan (yaitu: peringatan :: register dll), tetapi ini akan memberi Anda daftar setiap file .pm yang dapat diakses melalui perl.
for my $path (@INC) { my @list = `ls -R $path/**/*.pm`; for (@list) { s/$path\///g; s/\//::/g; s/\.pm$//g; print; } }
sumber
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
sumber
*.pm
modul. Anda mungkin melihat banyak duplikat ...Anda bisa mendapatkan daftar modul perl yang diinstal di sistem Anda dengan menggunakan
instmodsh
perintah di terminal Anda. Ini akan menanyakan tiga opsi untuk meningkatkan output yaitu:l - List all installed modules m <module> - Select a module q - Quit the program
sumber
Di Linux / Unix saya menggunakan perintah sederhana ini:
perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );'
Ini memindai semua folder
@INC
dan mencari file * .pm.sumber
Coba perintah berikut
instmodsh
sumber
Jawabannya dapat ditemukan di daftar FAQ Perl .
Anda harus membaca sekilas dokumentasi bagus yang disertakan dengan Perl
sumber
Coba
man perllocal
atauperldoc perllocal
.sumber
Semua yang tidak dapat menginstal perldoc, atau modul lain, dan ingin tahu modul apa yang tersedia (CPAN atau lainnya), berikut ini berfungsi untuk linux dan Mingw32 / 64:
grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq
Ya, itu berantakan. Ya, itu mungkin melaporkan lebih dari yang Anda inginkan. Tetapi jika Anda menyalurkannya ke dalam file, Anda dapat dengan mudah memeriksa, katakanlah, antarmuka dbm mana yang ada:
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;
Itulah mengapa saya berakhir di halaman ini (kecewa)
(Saya menyadari ini tidak menjawab pertanyaan OP dengan tepat, tetapi saya mempostingnya untuk siapa saja yang berakhir di sini karena alasan yang sama dengan saya. Itulah masalah tumpukan ***, hampir tidak mungkin menemukan pertanyaan Anda. bertanya, bahkan ketika itu ada, namun tumpukan *** hampir selalu menjadi hit teratas Google!)
sumber
Saya menulis skrip perl kemarin untuk melakukan hal ini. Skrip mengembalikan daftar modul perl yang diinstal di @INC menggunakan '::' sebagai pemisah. Panggil skrip menggunakan -
ATAU
perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)
Sampai sekarang skrip melewatkan direktori saat ini ('.') Karena saya mengalami masalah dengan tautan lunak berulang tetapi Anda dapat memasukkannya dengan mengubah fungsi grep di baris 17 dari
grep { $_ !~ '^\.$' } @INC
hanya,
Scriptnya dapat ditemukan di sini.
sumber
Berikut adalah alat baris perintah lain untuk mencantumkan semua file .pm yang diinstal:
Temukan modul Perl terinstal yang cocok dengan ekspresi reguler
sumber
Untuk berjalan melalui pohon direktori @INC tanpa menggunakan program eksternal seperti ls (1), seseorang dapat menggunakan
File::Find::Rule
modul, yang memiliki antarmuka deklaratif yang bagus.Juga, Anda ingin memfilter duplikat jika versi Perl sebelumnya berisi modul yang sama. Kode untuk melakukan ini terlihat seperti:
#! /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}++; } }
Di akhir proses, Anda juga memiliki semua nama modul Anda sebagai kunci di% seen hash. Kode tersebut dapat diadaptasi untuk menyimpan nama file kanonik (diberikan dalam $ file) sebagai nilai kunci alih-alih hitungan berapa kali terlihat.
sumber
Berikut ini berhasil untuk saya.
$ perldoc perllocal | grep Module $ perldoc perllocal | grep -E 'VERSION|Module'
sumber
Berikut adalah skrip oleh @ JamesThomasMoon1979 yang ditulis ulang sebagai satu baris
perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); print "$_ ".$i->version($_)."\n" for $i->modules();'
sumber
buku masak Perl berisi beberapa iterasi dari skrip "pmdesc" yang melakukan apa yang Anda inginkan. Pencarian Google untuk "Perl Cookbook pmdesc" dan Anda akan menemukan artikel di Situs Tanya Jawab lainnya , beberapa daftar kode di internet, diskusi tentang solusi, dan bahkan beberapa perbaikan .
sumber
Berikut adalah satu-liner Perl yang akan mencetak daftar modul yang diinstal:
perl -MExtUtils::Installed -MData::Dumper -e 'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'
Pastikan Anda memiliki Data :: Dumper diinstal.
sumber
Pengguna Windows cukup melakukan pencarian Windows Explorer untuk menemukannya.
sumber
Coba "perldoc -l":
$ perldoc -l Log :: Dispatch /usr/local/share/perl/5.26.1/Log/Dispatch.pm
sumber
Saat Anda memasukkan skrip Perl, Anda memiliki semua modul yang diinstal sebagai file .pm di bawah folder di @INC sehingga skrip bash kecil akan melakukan pekerjaan untuk Anda:
#!/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
sumber
find `perl -le'print for@INC'` -name '*.pm'
Untuk Linux, cara termudah untuk mendapatkannya adalah,
dpkg -l | grep "perl"
sumber
Ini berhasil untuk saya
perl -e 'print join("\n",@INC,"")'
sumber
Inilah yang saya lakukan:
perl -M{cpan_module}
Jika Anda tidak menerima kesalahan apa pun, ada kemungkinan besar modul tersebut diinstal.
sumber