2008-09-25 11 views
48

आप एक स्थापित पर्ल मॉड्यूल का संस्करण कैसे ढूंढते हैं?मैं एक स्थापित पर्ल मॉड्यूल का संस्करण कैसे ढूंढ सकता हूं?

यह नीचे दिए गए उत्तर में है, लेकिन मुझे यहां रहने के लिए पर्याप्त महत्वपूर्ण लगता है। इन सुझावों के साथ, मैं अपने .bashrc

function perlmodver { 
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \ 
    " is installed.\n"' $1 
} 
+1

भी देखें http://stackoverflow.com/questions/ 1 920045/कैसे-कर-i-get-the-version-and-location-of-an-install-perl-module – Ether

उत्तर

52

आप मॉड्यूल के संस्करण प्राप्त करने के प्रयास कर रहे हैं क्यों? क्या आपको किसी प्रोग्राम के भीतर से इसकी आवश्यकता है, क्या आपको बस किसी अन्य ऑपरेशन को पास करने के लिए नंबर की आवश्यकता है, या आप बस यह पता लगाने की कोशिश कर रहे हैं कि आपके पास क्या है?

मैं इस (जो पर्ल के साथ आता है) -D स्विच के साथ cpan में बनाया गया है, ताकि आप संस्करण है कि आप स्थापित किया है और CPAN पर वर्तमान संस्करण देख सकते हैं:

 
$ cpan -D Text::CSV_XS 

Text::CSV_XS 
------------------------------------------------------------------------- 
     Fast 8bit clean version of Text::CSV 
     H/HM/HMBRAND/Text-CSV_XS-0.54.tgz 
     /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm 
     Installed: 0.32 
     CPAN:  0.54 Not up to date 
     H.Merijn Brand (HMBRAND) 
     [email protected] 

आप देखना चाहते हैं बाहर का तारीख मॉड्यूल के सभी, -O (राजधानी ओ) स्विच का उपयोग करें:

 
$ cpan -O 
Module Name        Local CPAN 
------------------------------------------------------------------------- 
Apache::DB        0.1300 0.1400 
Apache::SOAP        0.0000 0.7100 
Apache::Session       1.8300 1.8700 
Apache::SizeLimit       0.0300 0.9100 
Apache::XMLRPC::Lite      0.0000 0.7100 
... and so on 

आप द्वारा स्थापित किए गए सभी मॉड्यूल के लिए यह देखने के लिए चाहते हैं, एक autobundle बनाने के लिए -a स्विच प्रयास करें।

+1

(मुझे पता है कि यह एक पुराना जवाब है!) मैंने कोशिश की- डी और -ओ और सीपीएन उन विकल्पों को समझ में नहीं आया। मैनपेज ने विकल्पों को दिखाया लेकिन परल्डोक नहीं था। क्या देता है? – Mei

+0

क्या मैनपेज और पेल्डडोक अलग-अलग संस्करणों के साथ जाते हैं? –

50

अधिकांश मॉड्यूल (विशेष रूप से CPAN से लोगों) में एक समारोह बनाने के एक $ संस्करण वेरिएबल है:

perl -MSome::Module -le 'print $Some::Module::VERSION' 
+1

यह सबसे अच्छा तरीका है – dns

+3

यह किसी भी मॉड्यूल के साथ काम करने के लिए सारणित नहीं है। सही जवाब नहीं है। –

+3

यह काम करता है। हालांकि, विंडोज़ पर इसे काम करने के लिए अलग-अलग उद्धृत किया जाना चाहिए (उदाहरण के लिए [फाइल :: प्राप्त करें] (http://perldoc.perl.org/File/Fetch.html)): 'perl -MFile :: Fetch -le ​​" प्रिंट $ फ़ाइल :: प्राप्त करें :: संस्करण "' - एकल उद्धरणों के बजाय डबल कोट्स (अन्यथा, एक त्रुटि संदेश परिणाम है: "ईओएफ से पहले लाइन 1" कहीं भी स्ट्रिंग टर्मिनेटर नहीं मिल सकता है। ") –

8

आप भाग्यशाली हैं, मॉड्यूल एक होगा पैकेज चर नामित $ संस्करण:

$ perl -MCPAN -e 'print "$CPAN::VERSION\n"' 
1.9205 

इस मॉड्यूल के लिए आवश्यक है CPAN पर वितरित करने के लिए है, लेकिन आंतरिक रूप से मो विकसित ड्यूल एक अलग सम्मेलन का पालन कर सकते हैं या बिल्कुल भी नहीं।

+0

सीपीएएन पर मॉड्यूल वितरित करने के लिए वास्तव में इसकी आवश्यकता नहीं है। कई वितरण संस्करण को घोषित करने के लिए उस चर को देखते हैं, लेकिन डिस्ट्रो में केवल मुख्य मॉड्यूल को ऐसा करने की आवश्यकता है। उदाहरण के लिए, Mojolicious में मॉड्यूल में से किसी भी मॉड्यूल को देखें। –

2

मैंने रिपोर्ट करने के लिए एक छोटी सी लिपि लिखी है: perlver

यह एक सरल छोटे से उपकरण है जो बताता है कि एक मॉड्यूल आप स्थापित किया है के संस्करण, और जहां .pm फ़ाइल स्थित है। यह भी सुनिश्चित करता है कि मॉड्यूल सफलतापूर्वक लोड किया जा सकता है। यह स्वचालित रूप से '-', '/', या '\' to '::' को परिवर्तित करता है, ताकि आप या कैननिकल मॉड्यूल नाम के बजाय पथनाम का उपयोग कर सकें।

यह मानता है कि मॉड्यूल एक $ संस्करण परिभाषित करता है। यदि मॉड्यूल एक $ संस्करण परिभाषित नहीं करता है, तो यह आपको अभी भी बताएगा कि .pm फ़ाइल कहां है, इसलिए आप इसे मैन्युअल रूप से जांच सकते हैं। तुम भी एक बार में कई मॉड्यूल की जाँच कर सकते हैं:

$ perlver CPAN DBD-Pg Getopt::Long 
CPAN 1.7602 is 
/usr/lib/perl5/5.8.8/CPAN.pm 
DBD::Pg 1.49 is 
/usr/lib/perl5/vendor_perl/5.8.8/i686-linux/DBD/Pg.pm 
Getopt::Long 2.36 is 
/usr/lib/perl5/vendor_perl/5.8.8/Getopt/Long.pm 
0

इसके अलावा, मॉड्यूल Exporter.pm का उपयोग के लिए, तो आप इस चाल के साथ इस बारे में जानकारी प्राप्त कर सकते हैं:

perl -MSome::Module=99999 -ex 
Some::Module version 99999 required--this is only version 1.9205 at ... 

मॉड्यूल का उपयोग नहीं करते के लिए Exporter.pm, एक थोड़ा लंबा चाल की रिपोर्ट एक ही जानकारी:

perl -e'use Some::Module 99999' 
Some::Module version 99999 required--this is only version 1.9205 at ... 
16

वहाँ एक कम टाइपिंग चाल है, काम करता है कि कुछ के रूप में एक संस्करण n एक यूनिक्स टाइमस्टैम्प की तरह पागल नहीं है, अपने मॉड्यूल प्रदान की भूरा रंग।

perl -MFoo::Bar\ 9999 

यह काम करता है कि यह क्या तब्दील हो क्योंकि

use Foo::Bar 9999; 

अर्थात कम से कम संस्करण 9999 या नए है कि फू :: बार का एक संस्करण। और क्या आप प्राप्त

Foo::Bar version 9999 required--this is only version 1.1. 
BEGIN failed--compilation aborted. 

(साफ चाल मैं मैट ट्राउट से सीखा है।) है

+0

मैं उम्र के लिए भी इसका उपयोग कर रहा हूं। याद नहीं किया जा सकता था कि मैंने इसे कहाँ से उठाया, लेकिन सबसे अधिक संभावना है कि मुझे इसे एक ही स्थान से मिला। – rjray

+0

विंडोज कमांड प्रॉम्प्ट के लिए मामूली परिवर्तन (किसी भी कारण से): perl -M "फू :: बार 99 99" – igelkott

+0

@igelkott: यह [फ़ाइल :: प्राप्त करें] के साथ काम करता है (http://perldoc.perl.org/ फ़ाइल/Fetch.html), 'perl -M" फ़ाइल :: 99 99 प्राप्त करें "' (64-बिट पर्ल 5.18)। आउटपुट: 'फ़ाइल :: प्राप्त संस्करण 99 99 आवश्यक - यह केवल संस्करण 0.46 है।'। हालांकि, दूसरी पंक्ति, "BEGIN विफल - संकलन निरस्त।", पहली नज़र में भ्रमित है (उत्तर में सूचीबद्ध)। –

28

संस्करण सभी पर्ल कक्षाओं की UNIVERSAL विधि है। आप इसे मॉड्यूल संस्करण प्राप्त करने के लिए उपयोग कर सकते हैं (यदि यह सेट किया गया है जो आमतौर पर है)।

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

धन्यवाद, यह सब मैं देख रहा था :) – coredump

+0

यह वही है जो मुझे चाहिए! – farhany

+1

यह सही जवाब है। –

3

बाहर चेक CPAN पर pmtools स्क्रिप्ट:

यहाँ एक एक लाइनर जहां आप केवल एक बार मॉड्यूल का नाम जोड़ने के लिए है। यदि आप डेबियन (-आधारित) डिस्ट्रो का उपयोग कर रहे हैं, तो एक आसान pmtools package भी है। इसमें एक स्क्रिप्ट "pmvers" शामिल है जो आपको मॉड्यूल का संस्करण बताती है। यह काफी आसान है।

यह पोस्ट किए गए विभिन्न एक-लाइनर लोगों के समान कुछ करता है, लेकिन यह त्रुटि प्रबंधन के बारे में थोड़ा सा स्मार्ट है, और आपको एक बार में एक से अधिक मॉड्यूल का संस्करण दे सकता है।

5

उत्तर के लिए धन्यवाद! मैं अपने .bashrc में एक समारोह बना लिया है आसानी से एक पर्ल मॉड्यूल के संस्करण को खोजने के लिए: सोलारिस 10 में

function perlmodver { 
    perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1 
} 
1

हम प्रणाली पर्ल है (/ usr/bin/पर्ल), और इसके बाद के संस्करण समाधान बेकार हैं। उनमें से कुछ रिपोर्ट करते हैं "module.pm स्थापित नहीं है", उनमें से कुछ में कोई आउटपुट नहीं है।

यहां कोड है जो उपयोगी है, जो सभी मॉड्यूल और उनके संस्करण को सूचीबद्ध कर सकता है।

#!/usr/bin/perl 

use strict; 
use ExtUtils::Installed; 

my @modules; 
my $installed = ExtUtils::Installed->new(); 

if (scalar(@ARGV) > 0) { 

    @modules = @ARGV; 

} else { 

    @modules = $installed->modules(); 

} 

print "Module\tVersion\n"; 

foreach (@modules) { 

    print $_ . "\t" . $installed->version($_) . "\n"; 

} 
0

तुम भी मेरे लिए याद करने के लिए App::module::version

$ module-version 

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004 
1

सबसे आसान पर एक नज़र और सबसे मजबूत संस्करण ले जा सकते हैं:

perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;' 
संबंधित मुद्दे