2009-12-17 14 views
5

क्या यह पता लगाने का एक शानदार तरीका है कि आपके सिस्टम में एक निश्चित पर्ल मॉड्यूल स्थापित किया गया है या नहीं? मेरा पुराना सटपिड तरीका एक पर्ल स्क्रिप्ट लिखना है जिसमें केवल एक चीज है जो मॉड्यूल का उपयोग करने के लिए है। अगर मैं पहचान स्क्रिप्ट चलाता हूं तो कुछ भी नहीं होता है, तो मुझे पता है कि मॉड्यूल स्थापित किया गया है, हालांकि मुझे अभी भी पता नहीं है कि कौन सा संस्करण और मॉड्यूल स्थापित किया गया है।मैं एक स्थापित पर्ल मॉड्यूल का संस्करण और स्थान कैसे प्राप्त कर सकता हूं?

अग्रिम धन्यवाद।

+1

यह भी देखें कि http://stackoverflow.com/questions/135755/how-can-i-find-the-version-of-an-installed-perl-module – Ether

उत्तर

9

कुछ की तरह:

perl -MModule -e 'print "$Module::VERSION\n"' 2>/dev/null || echo "Not installed" 

आप किसी दिए गए मॉड्यूल के संस्करण देना होगा, या आपको बता यह स्थापित नहीं है।

perl -MXML::Parser -e 'print "$XML::Parser::VERSION\n"' 2>/dev/null || echo "Not installed" 

मॉड्यूल पथ ढूंढने के लिए, आप @INC संभावित स्थानों को खोजने के लिए की जांच कर सकता है, या आप शायद perlwhich पर गौर कर सकता है: उपयोग की तरह लग रहे हैं। pmtools से pmpath भी है।

+5

यदि आप pmtools का उपयोग कर रहे हैं, तो [pminst] (http://search.cpan.org/~mlfisher/pmtools/pminst) दिखाता है कि कोई मॉड्यूल स्थापित है, और [pmvers] (http://search.cpan.org/~mlfisher/pmtools/pmvers) कौन सा संस्करण दिखाता है स्थापित है। (डेबियन/उबंटू पर 'apt-get install pmtools') – plusplus

3

instmodsh

NAME 
     instmodsh - A shell to examine installed modules 

SYNOPSIS 
      instmodsh 

DESCRIPTION 
     A little interface to ExtUtils::Installed to examine installed modules, validate your packlists and even create a tarball from an installed module. 

SEE ALSO 
     ExtUtils::Installed 
+0

जानना अच्छा है, लेकिन ध्यान दें कि _core_ मॉड्यूल अलग-अलग सूचीबद्ध नहीं हैं, बल्कि एक सार मॉड्यूल से संबंधित फाइलों को बस 'पर्ल' नाम दिया गया है। इसके अलावा, तथ्य यह है कि 'instmodsh' _shell_ उपयोग करने के लिए थोड़ा अजीब बनाता है - वांछित जानकारी प्राप्त करने के लिए आपको कई इंटरैक्टिव चरणों की आवश्यकता होती है, और जब मुझे मॉड्यूल का _location_ मिल सकता है, तो ऐसा कोई तरीका नहीं है _version_ प्राप्त करें। फ्लिप पक्ष पर, 'एल' कमांड का उपयोग करना सभी गैर-कोर मॉड्यूल को देखने का एक सुविधाजनक तरीका है (जो किसी विशेष वितरण के साथ आ सकता है या बाद में उपयोगकर्ता द्वारा स्थापित किया गया हो सकता है)। – mklement0

+0

एक और विचार: 'instmodsh' उन मॉड्यूल नहीं मिलेगा जिन्हें '* .packlist' फ़ाइलों के माध्यम से स्थापित नहीं किया गया था। – mklement0

1

अगर वहाँ इस के लिए किसी भी स्मार्ट तरीका है मैं नहीं जानता। लेकिन मैं आमतौर पर
पर निर्भर करता हूं कि'ld 'या' -m 'विकल्प perldoc का उपयोग करना है। उदाहरण के लिए:

%perldoc -l XML::Simple

और आउटपुट नीचे की तरह कुछ है, जो मॉड्यूल फ़ाइल का पूर्ण पथ है

.../lib/XML/Simple.pm 

तुम्हारा की तुलना में इस दृष्टिकोण के साथ लाभ यह है कि, अगर मॉड्यूल स्थापित किया गया है है
आउटपुट में मॉड्यूल स्थान के लिए पथ शामिल है। लेकिन जब मॉड्यूल नहीं है
स्थापित या अगर यह एक perldoc त्रुटि से पता चला संदेश है नहीं करता है "नहीं प्रलेखन के लिए ... मिला",
यह असंभव है, तो त्रुटि लापता की वजह से है भेद करने के लिए कर रही है मॉड्यूल या अनुपलब्ध
दस्तावेज़ीकरण। इस तरह के परिदृश्य में -एम विकल्प आसान हो जाता है क्योंकि यह पथ के साथ फ़ाइल की सामग्री
प्रिंट करता है।

+1

perldoc आमतौर पर उपयुक्त नहीं है क्योंकि यह मॉड्यूल के दस्तावेज़ से संबंधित है जो कभी-कभी कोड से अलग हो सकता है, उदा। एक्सएमएल :: LibXML :: दस्तावेज़। – daxim

+0

मुझे आपकी चिंता यहां नहीं मिलती है। यदि आप eesborate plesae कर सकते हैं क्यों यह अनुपयुक्त होगा यह सहायक होगा। प्रति perldoc की -help विकल्प के रूप में: अपनी संपूर्णता में -m प्रदर्शन मॉड्यूल की फाइल मॉड्यूल का फ़ाइल नाम प्रदर्शित करें तो perldoc essentily मॉड्यूल फ़ाइलों उपरोक्त मामले एक्सएमएल/LibXML/दस्तावेज में संभाल कर सकते हैं एल। पॉड एक पॉड फ़ाइल है जो एक .pm फ़ाइल नहीं है। यहां तक ​​कि % perl -e 'एक्सएमएल :: LibXML :: दस्तावेज़' का उपयोग करने का प्रयास भी एक त्रुटि देता है। – sateesh

+0

'perldoc -ml XML :: LibXML :: दस्तावेज़' आपको '.pm' फ़ाइल का पथ देता है भले ही एक अलग '.pod' फ़ाइल हो। – hdp

2

pmvers का उपयोग करें। नाम की तरह सुझाव देता है, यह एक स्थापित मॉड्यूल का संस्करण दिखाता है। यदि कोई मॉड्यूल स्थापित नहीं है, तो यह परिचित त्रुटि संदेश के साथ विफल रहता है: Can't locate … in @INC (@INC contains: …)

मॉड्यूल के स्थापना पथ को खोजने के लिए उसी वितरण से pmpath का उपयोग करें।

1

मैं इन बैश समारोह/पर्ल oneliners का उपयोग संस्करण संख्या और स्थान पर्ल मॉड्यूल के खोजने के लिए:

# equivalent to perldoc -l <module> 
perlwhere() { 
    perl -wle'eval "require $ARGV[0]" or die; ($mod = $ARGV[0]) =~ s|::|/|g; print $INC{"${mod}.pm"}' $1 
} 

perlversion() { 
    perl -M$1 -wle'print $ARGV[0]->VERSION' $1 
} 

: [ether ~].2$; perlwhere Test::More 
/usr/lib/perl5/5.8.8/Test/More.pm 
: [ether ~].2$; perlversion Test::More 
0.94 
1

pmvers उपयोगिता और अन्य pmtools आपको क्या चाहिए करेंगे।

perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module 
+0

अच्छा, हालांकि मैं निम्नलिखित मामूली चिमटा का सुझाव देता हूं ताकि एक गैर-मौजूदा मॉड्यूल को उस संस्करण से अलग करने में सक्षम हो जो कि संस्करण संख्या न हो: 'perl -le' eval "को $ ARGV [0]" या मरने की आवश्यकता होती है; $ ARGV प्रिंट करें [0] -> संस्करण 'कुछ :: मॉड्यूल' – mklement0

5

कम से कम बात मैं इस बात का पता है एक स्क्रिप्ट या खोल उर्फ ​​शामिल नहीं करता है:

$ perl -MFoo::Bar\ 99 
Foo::Bar version 99 required--this is only version 1.234. 

(या सामान्य संदेश के बारे में नहीं तो यहाँ एक एक लाइनर एक मॉड्यूल संस्करण को मिल रहा है @INC में नहीं है यदि यह स्थापित नहीं है)

उत्सुकता के लिए, यह perl -e 'use Foo::Bar 99' जैसा ही है।

+0

' सीपीएन-डी फू :: बार 'थोड़ा छोटा है। :) –

3

यहाँ एक प्रोग्राम है जो करता है कि है:

#!/usr/bin/perl 
# testmod - test to see if a module is available 

use strict; 
use warnings; 

my $mod = (shift @ARGV) || die "usage: $0 module\n"; 

# convert module-name to path 
my $file = $mod; 
$file =~ s{::}{/}gsmx; 
$file .= '.pm'; 

# Pull in the module, if it exists 
eval { require $file } 
    or die "can't find module $mod\n"; 

# Get the version from the module, if defined 
my $ver; 
{ no strict 'refs'; 
    $ver = ${$mod . "::VERSION"} || 'UNKNOWN'; 
} 
# And its location 
my $from = $INC{$file}; 
print "module $mod is version $ver loaded from $from\n"; 
0

आप एक पार मंच CLI (लिनक्स, OSX, Windows) के लिए देख रहे हैं, पर विचार मेरी whichpm utility; उदा .:

# Locate the Data::Dumper module, and also print 
# version information and core-module status. 
$ whichpm -v Data::Dumper 
Data::Dumper 2.145 core>=5.005 /usr/lib/perl/5.18/Data/Dumper.pm 

यह भी आकस्मिक डुप्लिकेट और सूची सभी स्थापित मॉड्यूल पा सकते हैं।

आप Node.js/io.js स्थापित करने की है, तो आप यह NPM रजिस्ट्री से स्थापित कर सकते हैं:

[sudo] npm install whichpm -g 

मैनुअल स्थापना के निर्देश और अधिक जानकारी के लिए, the repo देखते हैं; यहां latest version (वर्तमान में रहेगा) के लिए एक सीधा डाउनलोड लिंक है।

संबंधित मुद्दे

 संबंधित मुद्दे