ฉันจะรับรายการโมดูล CPAN ที่ติดตั้งได้อย่างไร


90

นอกเหนือจากการพยายาม

perldoc <module name>

เป็นรายบุคคลสำหรับโมดูล CPAN ใด ๆ ที่ใช้จินตนาการของฉันหรือผ่านระบบไฟล์และดูที่ไดเร็กทอรีฉันไม่รู้ว่าเราติดตั้งโมดูลอะไร

วิธีใดที่ง่ายที่สุดในการรับรายการโมดูล CPAN ทั้งหมดที่ติดตั้งไว้ จากบรรทัดคำสั่งหรืออย่างอื่น


ฉันสามารถแนะนำให้ใช้pmtoolsโดยเฉพาะpminstซึ่งยอมรับนิพจน์ทั่วไป
lukmdo

perl-pmtoolsเป็นเครื่องมือที่ดีสำหรับคุณ
jaseywang

คุณต้องการทราบว่ามีการติดตั้งโมดูลใดหรือติดตั้งการกระจายอะไรบ้าง?
Tim Bunce

4
ฉันพบว่าcpan -lมีประโยชน์สำหรับตัวเองบน windows
เป็นโมฆะ

1
สิ่งนี้อาจมีประโยชน์:instmodsh
ราวี

คำตอบ:


67

นี้เป็นคำตอบในคำถามที่พบบ่อย Perl perldoc -q installedคำตอบซึ่งสามารถพบได้อย่างรวดเร็วด้วย กล่าวโดยย่อคือการใช้ExtUtils::Installedหรือการใช้File::Findงานตัวแปรของทั้งสองอย่างที่กล่าวถึงก่อนหน้านี้ในหัวข้อนี้

คุณยังสามารถดูรายการคำถามที่พบบ่อย"ฉันจะค้นหาโมดูลที่ติดตั้งในระบบของฉันได้อย่างไร" ใน perlfaq3 คุณสามารถดูรายการคำตอบของ FAQ ทั้งหมดได้โดยดูในperlfaq


36
สิ่งนี้ให้อะไรมากกว่าที่ OP ร้องขอจนแทบไร้ประโยชน์
Justin

2
cpan -l กำลังทำการค้นหาแบบวนซ้ำของไดเร็กทอรีใดก็ตามที่ฉันเรียกใช้ มีวิธีใดบ้างในการส่งผ่านตัวเลือกExtUtils::Installedของskip_cwdตัวสร้างจากบรรทัดคำสั่งนั้น?
Mark Reed

10
คำถามที่พบบ่อยกล่าวว่าจะใช้cpan -lแต่ไม่ได้ทำงานใน RHEL6 และโยนข้อผิดพลาด/usr/bin/cpan -l Unknown option: l
Stefan Lasiewski

1
$ perldoc perllocal | grep Module $ perldoc perllocal | grep -E 'VERSION | Module'
caot

ใช้ perldoc -t perllocal เพื่อรับเอาต์พุตข้อความธรรมดามิฉะนั้น grep อาจไม่ทำงานเนื่องจากอักขระ ctrl ฝังตัว
user333869

35
perldoc perllocal

แก้ไข: มีข้อมูลเพิ่มเติม (เล็กน้อย) เกี่ยวกับเรื่องนี้ในคำถามที่พบบ่อยเกี่ยวกับCPAN


2
ขอบคุณสำหรับลิงก์ไปยังคำถามที่พบบ่อย น่าเสียดายที่ไม่ได้ติดตั้งโมดูลทั้งหมดที่ฉันทราบว่ากำลังส่งคืน วันที่ :: Calc ไม่ปรากฏที่นั่นด้วยซ้ำ
David McLaughlin

26

perldoc -q installed

อ้างว่าcpan -lจะทำเคล็ดลับ แต่มันไม่ได้ผลสำหรับฉัน ตัวเลือกอื่น ๆ :

cpan -a

ไม่พ่นรายการแพ็คเกจที่ติดตั้งออกมาและมีผลข้างเคียงที่ดีในการเขียนลงในไฟล์


2
สำหรับบันทึกใช้cpan -lงานได้ (หรือทำสำหรับฉันด้วย CPAN v2.05) cpan -aสวยกว่าแน่นอน
William Turrell

23

เป็นที่น่าสังเกตว่า perldoc perllocal จะรายงานเฉพาะโมดูลที่ติดตั้งผ่าน CPAN หากมีคนติดตั้งโมดูลด้วยตนเองก็จะไม่พบโมดูลนั้น นอกจากนี้หากคุณมีหลายคนติดตั้งโมดูลและ perllocal.pod อยู่ภายใต้การควบคุมแหล่งที่มาผู้คนอาจแก้ไขข้อขัดแย้งไม่ถูกต้องและทำให้รายการเสียหาย (เช่นเกิดขึ้นที่นี่ในที่ทำงาน)

น่าเสียใจที่ดูเหมือนว่าโซลูชันจะเดินผ่าน @INC ด้วย File :: Find หรือสิ่งที่คล้ายกัน อย่างไรก็ตามไม่เพียงแค่ค้นหาโมดูลเท่านั้น แต่ยังพบโมดูลที่เกี่ยวข้องในการแจกจ่าย ตัวอย่างเช่นจะรายงาน TAP :: Harness และ TAP :: Parser นอกเหนือจากชื่อการแจกจ่ายจริงของ Test :: Harness (สมมติว่าคุณมีเวอร์ชัน 3 ขึ้นไป) คุณสามารถจับคู่กับชื่อการแจกจ่ายและทิ้งชื่อที่ไม่ตรงกัน แต่จากนั้นคุณอาจทิ้งโมดูลที่สร้างและติดตั้งไว้ในเครื่อง

ฉันเชื่อว่างานทำดัชนีแบ็คแพนของ brian d foy ควรมีโค้ดสำหรับส่งที่ไฟล์. pm และจะพยายามสรุปการแจกจ่าย แต่แม้บางครั้งก็ล้มเหลวเนื่องจากไม่จำเป็นต้องติดตั้งสิ่งที่อยู่ในแพ็คเกจ (ดู Devel :: Cover :: Inc เป็นตัวอย่าง)


1
ฉันไม่คิดว่าฉันจำเป็นต้องดึงปืนแคตตาล็อก BackPAN สำหรับปืนนั้น สิ่งที่ฉันทำกับ Test :: Prereq เพื่อยุบมันตามสิ่งที่ distro พบใน 02packages อาจเพียงพอ นั่นเป็นเคล็ดลับเล็กน้อยกว่าการแสดงไฟล์โมดูลและแคตตาล็อกยังไม่ใกล้เคียงกับการจัดการ
brian d foy

2
จากการทดสอบขั้นพื้นฐาน (ทำการ "make -n install" ใน dirs บางตัวที่ฉันวางไว้) ขั้นตอน "make install" ของโมดูลที่ใช้ MakeMaker จะอัปเดต perllocal ไม่ได้เจาะจงเฉพาะการติดตั้งผ่าน CPAN โดยตรง
rjray

1
ฉันคิดว่า Dist :: Surveyor ยังคงเป็นเครื่องมือที่ดีที่สุดในการตอบคำถาม " การกระจายใดที่ติดตั้งในไลบรารีนั้น" ดูงานนำเสนอนี้สำหรับรายละเอียดเพิ่มเติม มีความง่ายต่อการใช้งาน fatpacked รุ่นในเป็นrepo คอมไพล์
Tim Bunce

21
$ 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"

2
ใช้งานได้ดีสำหรับพวกเราที่ไม่ได้ติดตั้ง cpan
pdwalker

คำตอบที่ประเมินต่ำจริงๆ นอกจากนี้ยังใช้ได้กับการแจกแจง RHEL
Cristina

5
ฉันได้รับ:No documentation found for "perllocal".
Luis A. Florit

ใช้เวลาวิ่งนานกว่าที่ฉันคาดไว้ (ประมาณ 20 วินาทีหรือมากกว่านั้นบนเครื่องของฉัน) แต่มันทำงานได้อย่างไม่มีที่ติ! คำตอบที่ดี
Hans Goldman

20

คุณสามารถลองติดตั้ง ExtUtils ได้แต่จะดูเฉพาะใน.packlists ดังนั้นจึงอาจพลาดโมดูลที่ผู้คนเคลื่อนย้ายสิ่งของ@INCด้วยมือ

ฉันเขียนApp-Module-Listerสำหรับเพื่อนที่ต้องการทำสิ่งนี้เป็นสคริปต์ CGI บนบัญชีเว็บโฮสติ้งที่ไม่ใช่เชลล์ คุณใช้ไฟล์โมดูลและอัปโหลดเป็นชื่อไฟล์ที่เซิร์ฟเวอร์ของคุณจะถือว่าเป็นสคริปต์ CGI ไม่มีการอ้างอิงนอกไลบรารีมาตรฐาน ใช้ตามที่เป็นอยู่หรือขโมยรหัส

แสดงรายการโมดูลและเวอร์ชัน:

Tie :: รอบ 1.15
เสมอ :: IxHash 1.21
ผูก :: สลับ 1.07
เสมอ :: ToObject 0.03
เวลา :: CTime 99.062201
เวลา :: DaysInMonth 99.1117
เวลา :: ยุค 0.02
เวลา :: เลือน 0.34
เวลา :: JulianDay 2003.1125
เวลา :: ParseDate 2006.0814
เวลา :: เขตเวลา 2549.0814

ฉันตั้งใจจะเพิ่มสิ่งนี้เป็นคุณสมบัติให้กับcpanเครื่องมือดังนั้นฉันจะทำเช่นนั้นด้วย [เวลาผ่าน] และตอนนี้ผมมีสวิทช์ใน-l cpanฉันมีสิ่งอื่น ๆ น้อยจะทำอย่างไรกับมันก่อนที่ผมจะต้องมีการปลดปล่อย แต่มันอยู่ใน GitHub หากคุณไม่ต้องการรอเพียงแค่ลองใช้-aสวิตช์เพื่อสร้างการรวมกลุ่มอัตโนมัติแม้ว่าจะมี Pod อยู่รอบ ๆ รายการก็ตาม

โชคดี;


13

นี่คือสคริปต์ที่จะทำเคล็ดลับ:

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

ภายใต้ RHEL 6.9 สคริปนี้พิมพ์เฉพาะสิ่งต่อไปนี้: Perl - 5.10.1 โมดูลไม่อยู่ในรายการ
Hans Deragon

9

ฉันชอบใช้คำสั่ง CPAN 'r' สำหรับสิ่งนี้ คุณสามารถเข้าสู่เชลล์ CPAN ด้วยรูปแบบเก่า:

sudo perl -MCPAN -e shell

หรือในระบบที่ใหม่กว่าส่วนใหญ่จะมีคำสั่ง 'cpan' ดังนั้นคำสั่งนี้จะนำคุณไปสู่เชลล์:

sudo cpan

(โดยทั่วไปคุณต้องใช้ 'sudo' เพื่อเรียกใช้ในฐานะรูทหรือใช้ 'su -' เพื่อกลายเป็นรูทก่อนที่คุณจะเรียกใช้เว้นแต่คุณจะตั้งค่า cpan เพื่อให้คุณเรียกใช้ในฐานะผู้ใช้ปกติ แต่ติดตั้งเป็นรูท หากคุณไม่มีรูทในเครื่องนี้คุณยังสามารถใช้เชลล์ CPAN เพื่อค้นหาข้อมูลนี้ได้ แต่คุณจะไม่สามารถติดตั้งโมดูลได้และคุณอาจต้องผ่านการตั้งค่าเล็กน้อยในครั้งแรกที่คุณ เรียกใช้)

จากนั้นเมื่อคุณอยู่ใน cpan shell แล้วคุณสามารถใช้คำสั่ง 'r' เพื่อรายงานโมดูลที่ติดตั้งและเวอร์ชันทั้งหมด ดังนั้นที่พรอมต์ "cpan>" ให้พิมพ์ 'r' นี่จะแสดงรายการโมดูลที่ติดตั้งและเวอร์ชันทั้งหมด ใช้ "?" เพื่อรับความช่วยเหลือเพิ่มเติม


1
จริงๆแล้ว 'r' ให้คำแนะนำในการติดตั้งใหม่นั่นคือโมดูลทั้งหมดในการติดตั้งของคุณที่มี CPAN เวอร์ชันใหม่กว่า เว้นแต่การติดตั้งของคุณจะล้าสมัยไปมากนี่จะไม่ใช่รายการที่สมบูรณ์
EvdB

'r' ของฉันมักจะรายงานถัดจากอะไรเพราะฉันอัปเกรดอย่างบังคับ ซึ่งเตือนฉันว่า ... ฉันยังไม่ได้อัปเกรดในวันนี้
skiphoppy

3
-r recompiles สิ่งต่างๆ หากต้องการรับรายการให้ลอง -a หรือดาวน์โหลดแหล่งข้อมูลล่าสุดและเล่นด้วยสวิตช์ -l ใหม่ที่เพิ่มเข้ามาสำหรับคำตอบนี้ :)
brian d foy

1
ทำไมต้องมาsudoที่นี่? มันไม่จำเป็นโดยสิ้นเชิง
Aristotle Pagaltzis

2
สังเกตความแตกต่างระหว่างอาร์กิวเมนต์บรรทัดคำสั่ง '-r' ถึง 'cpan' และคำสั่ง 'r' ใน cpan shell :)
EvdB

7

นี่เป็นวิธีแฮ็กจริงๆใน * nix คุณจะได้รับบางสิ่งที่คุณไม่สนใจจริงๆ (เช่นคำเตือน :: register ฯลฯ ) แต่ควรให้รายการไฟล์. pm ทุกไฟล์ที่สามารถเข้าถึงได้ผ่าน เพิร์ล


for my $path (@INC) {
    my @list = `ls -R $path/**/*.pm`;
    for (@list) {
        s/$path\///g;
        s/\//::/g;
        s/\.pm$//g;
        print;
    }
}


2
สิ่งนี้จะไม่ให้สิ่งที่เขาต้องการ จะไม่จัดกลุ่มไฟล์ที่เกี่ยวข้องตามการแจกจ่ายที่เป็นส่วนหนึ่งและจะแสดงรายการไฟล์ core * .pm ทั้งหมดจาก Perl เอง
rjray

7
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'

นี่เป็นสิ่งที่ดีมากเนื่องจากแสดงเส้นทางแบบเต็มไปยังแต่ละ*.pmโมดูลอย่างชัดเจน คุณอาจเห็นรายการที่ซ้ำกันมากมาย ...
not2qubit

7

คุณสามารถรับรายชื่อโมดูล perl ที่ติดตั้งในระบบของคุณได้โดยใช้instmodshคำสั่งในเทอร์มินัลของคุณมันจะถามคุณสามตัวเลือกเพื่อปรับปรุงผลลัพธ์คือ:

   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program

6

บน Linux / Unix ฉันใช้คำสั่งง่ายๆนี้:

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

มันจะสแกนโฟลเดอร์ทั้งหมดใน@INCและค้นหาไฟล์ * .pm ใด ๆ


ขอขอบคุณ! มีประโยชน์มาก.
not2qubit

ขอขอบคุณ! นั่นอาจเป็นสิ่งที่ดีที่สุดที่ฉันเคยได้รับการสอนด้วยการแสดงออกที่รวบรัดเช่นนี้
ewd


2

คำตอบที่สามารถพบได้ในPerl คำถามที่พบบ่อยรายการ

คุณควรอ่านเอกสารที่ดีเยี่ยมที่มาพร้อมกับ Perl

perldoc perltoc


2

ทุกคนที่ไม่สามารถติดตั้ง 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 เสมอ!)


สิ่งนี้ได้ผลสำหรับฉัน ขอบคุณสำหรับการโพสต์สิ่งนี้ ฉันต้องการสิ่งนี้ในสภาพแวดล้อมที่ฉันไม่มีสิทธิ์เข้าถึงมากนักเพื่อติดตั้ง / อัปเดตการอ้างอิงใด ๆ
Ashish Kumar

1

ฉันเขียนสคริปต์ perl เมื่อวานนี้เพื่อทำสิ่งนี้ สคริปต์ส่งคืนรายการของโมดูล perl ที่ติดตั้งใน @INC โดยใช้ '::' เป็นตัวคั่น เรียกสคริปต์โดยใช้ -

perl perlmod.pl

หรือ

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

ณ ตอนนี้สคริปต์จะข้ามไดเร็กทอรีปัจจุบัน (".") เนื่องจากฉันมีปัญหากับการเรียกซอฟต์ลิงก์ซ้ำ แต่คุณสามารถรวมไว้ได้โดยเปลี่ยนฟังก์ชัน grep ในบรรทัดที่ 17 จาก

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

เป็นเพียง

@INC

สคริปต์สามารถพบได้ที่นี่


1

นี่คือเครื่องมือบรรทัดคำสั่งอื่นในการแสดงรายการไฟล์. pm ที่ติดตั้งทั้งหมด:

ค้นหาโมดูล Perl ที่ติดตั้งที่ตรงกับนิพจน์ทั่วไป

  • พกพา (ใช้เฉพาะโมดูลหลัก)
  • ตัวเลือกแคชสำหรับการค้นหาที่เร็วขึ้น
  • ตัวเลือกการแสดงผลที่กำหนดค่าได้

1

ในการเดินผ่านแผนผังไดเร็กทอรี @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}++;
    }
}

ในตอนท้ายของการรันคุณยังมีชื่อโมดูลทั้งหมดของคุณเป็นคีย์ในแฮช% ที่เห็น โค้ดนี้สามารถดัดแปลงเพื่อบันทึกชื่อไฟล์ Canonical (กำหนดใน $ file) เป็นค่าของคีย์แทนการนับจำนวนครั้งที่เห็น


1

สิ่งต่อไปนี้ใช้ได้ผลสำหรับฉัน

$ perldoc perllocal | grep Module
$ perldoc perllocal | grep -E 'VERSION|Module'

1

นี่คือสคริปต์ของ @ JamesThomasMoon1979 ที่เขียนใหม่เป็นซับเดียว

perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); 
      print "$_ ".$i->version($_)."\n" for $i->modules();'

0

ตำรา Perl ประกอบด้วยสคริปต์ "pmdesc" ที่ทำซ้ำหลายครั้งซึ่งทำสิ่งที่คุณต้องการ ที่ Google ค้นหา "Perl ตำรา pmdesc" และคุณจะพบบทความเกี่ยวกับ Q & A อื่น ๆ ไซต์รายชื่อหลายรหัสในสุทธิการอภิปรายของการแก้ปัญหาและแม้กระทั่งการปรับแต่งบางส่วน


0

นี่คือ Perl หนึ่งซับที่จะพิมพ์รายการโมดูลที่ติดตั้ง:

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

ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Data :: Dumper แล้ว


2
รายการนี้มีเพียง 15 โมดูล perl แทนที่จะเป็น 5945 ที่แสดงรายการ 'cpan -l'
Paul Tomblin

0
cd /the/lib/dir/of/your/perl/installation
perldoc $(find . -name perllocal.pod)

ผู้ใช้ Windows เพียงแค่ค้นหา Windows Explorer เพื่อค้นหา



-1

เมื่อคุณป้อนสคริปต์ Perl คุณจะมีโมดูลที่ติดตั้งทั้งหมดเป็นไฟล์. pm ด้านล่างโฟลเดอร์ใน @INC ดังนั้นสคริปต์ทุบตีขนาดเล็กจะทำงานให้คุณ:

#!/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'
Hynek -Pichi- Vychodil

-2

สำหรับ Linux วิธีที่ง่ายที่สุดคือ

dpkg -l | grep "perl"

1
OP ขอรายชื่อโมดูล CPAN (perl) ที่ติดตั้งในระบบไม่ใช่ว่าติดตั้ง perl ในระบบหรือไม่ (OP ไม่ได้บอกเราว่ามี apt หรือไม่)
ROLO

ฉันไม่ใช่ผู้เชี่ยวชาญด้าน perl แต่ฉันเคยเห็นโมดูล perl ที่ติดตั้งจากคำสั่งด้านบน อาจไม่ใช่คำตอบที่สมบูรณ์แบบที่นี่
Yasiru G

@YasiruG จะแสดงรายการที่ติดตั้งผ่านแพ็คเกจเท่านั้น นั่นเป็นส่วนน้อยในการติดตั้งใด ๆ ส่วนใหญ่ติดตั้งผ่าน CPAN
jjmerelo

-2

สิ่งนี้ใช้ได้กับฉัน

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

ขอบคุณสำหรับข้อมูลโค้ดนี้ซึ่งอาจให้ความช่วยเหลือเฉพาะบางอย่างได้ทันที คำอธิบายที่เหมาะสมมากจะเพิ่มมูลค่าในระยะยาวด้วยการแสดงเหตุผลนี้เป็นทางออกที่ดีในการแก้ไขปัญหาและจะทำให้มันมีประโยชน์มากขึ้นให้กับผู้อ่านในอนาคตกับอื่น ๆ คำถามที่คล้ายกัน โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายรวมถึงสมมติฐานที่คุณตั้งขึ้น
Machavity

-3

นี่คือสิ่งที่ฉันทำ: perl -M{cpan_module}
หากคุณไม่ได้รับข้อผิดพลาดใด ๆ มีโอกาสดีที่โมดูลจะถูกติดตั้ง


2
ฉันไม่เชื่อว่าสิ่งนี้จะตอบคำถามได้ การใช้คำแนะนำนี้อาจใช้เวลาสักครู่ในการผ่านโมดูลทีละโมดูลเพื่อค้นหาว่าโมดูลใดติดตั้งหรือไม่
Dave Newman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.