2009-02-20 14 views
12

मुझे कैसे पता चलेगा कि पर्ल के साथ कौन से मॉड्यूल वितरित किए जाते हैं?पर्ल के साथ कौन से मॉड्यूल वितरित किए जाते हैं?

मेरा पहला अनुमान यह है कि सूचीबद्ध मॉड्यूल here हमेशा शामिल हैं, हालांकि मुझे यह स्पष्ट रूप से नहीं मिला है। हालांकि, मैंने मैक ओएस एक्स और लिनक्स पर स्थापित किए बिना इस सेट के बाहर मॉड्यूल का उपयोग किया है (उदा। एलडब्लूपी)।

तो मेरे सवाल का एक छोटे से परिष्कृत करने के लिए:

  • क्या मॉड्यूल सभी पर्ल प्रतिष्ठानों के साथ वितरित कर रहे हैं?

और:

  • लिनक्स (विशेष रूप से Debian/Ubuntu): कैसे मैं क्या मॉड्यूल के साथ वितरित किया गया है पता लगाऊं?

  • मैक ओएस एक्स?

  • सोलार्स?

प्रत्येक मामले में मैं पर्ल के संस्करण का उपयोग कर रहा हूं जो ऑपरेटिंग सिस्टम के नवीनतम संस्करण के साथ मानक आता है।

टीआईए।

अद्यतन: सवाल का कारण है कि मैं अलग लिनक्स और सोलारिस के लिए तैनाती के लिए मैक ओएस एक्स और लिनक्स पर विकसित कर रहा हूँ, और मैं इन पद्धतियों में से कुछ पर जड़ की जरूरत नहीं है, और के मामले में मैक ओएस इलेवन में एक कंपाइलर AFAIK भी नहीं है। तो मैं क्या जानना चाहता हूं कि बिना किसी इंस्टॉल किए सभी चार तैनाती में मेरे पास कौन से मॉड्यूल उपलब्ध हैं।

उत्तर

6

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

"मानक पुस्तकालय" का विचार होता था, लेकिन यह वास्तव में वास्तविकता में मौजूद नहीं है। Module::CoreList आपको "मानक लाइब्रेरी" में क्या बताता है, लेकिन कई विक्रेता अतिरिक्त मॉड्यूल स्थापित करते हैं और कुछ मॉड्यूल को भी हटाते या अपडेट करते हैं। इसके अतिरिक्त, Strawberry Perl और ActivePerl जैसे वितरण कई बोनस मॉड्यूल के साथ आते हैं।

इसके अलावा, आपको मॉड्यूल स्थापित करने के लिए रूट की आवश्यकता नहीं है। आपको केवल मॉड्यूल स्थापित करने के लिए रूट की आवश्यकता है जहां रूट मॉड्यूल स्थापित कर सकता है। perlfaq8 आपको जहां भी चाहें मॉड्यूल स्थापित करने के लिए सभी विवरण देता है। मैं अनुशंसा करता हूं कि आप वितरित @INC निर्देशिकाओं के बाहर सभी मॉड्यूल स्थापित करें ताकि आप अपना वितरित पर्ल साफ़ रखें।

गुड लक,

+0

मैंने cpan -a का उपयोग नहीं किया है (वास्तव में मेरे द्वारा उपयोग किए गए हैक के लिए नीचे दिए गए मेरे उत्तर को देखें) यदि आपके पास एक महीने पहले जवाब दिया गया था, तो मैं इसे सही जवाब के रूप में फ़्लैग कर रहा हूं! धन्यवाद। मुझे यकीन था कि एक रास्ता होना था, और यह भविष्य के लिए उपयोगी जानकारी होगी। –

-6
आप मुख्य प्रतीक तालिका में

देखो, यह आप सभी 'मानक' पैकेज उपलब्ध दिखाएगा ...

print %main::; 
+0

यही करता है * नहीं * दिखाने के सभी मॉड्यूल, वितरित केवल उन है कि में संकलित किया गया है। इसके अलावा यह अन्य बातों के सभी प्रकार को दर्शाता है। –

15

आप Module::CoreList इंस्टॉल करते हैं, कमांड लाइन कार्यक्रम corelist आप मॉड्यूल और बारे में सब कुछ बता सकते हैं उनके पर्ल के विभिन्न संस्करणों में संस्करण। आपके द्वारा लिंक किया गया पृष्ठ perl के नवीनतम संस्करण के लिए एक सिंहावलोकन देता है।

ध्यान दें कि वितरण अक्सर इस सूची की तुलना में डिफ़ॉल्ट रूप से अधिक प्रदान करते हैं, लेकिन यह सूची हर जगह उपस्थित होने के लिए माना जा सकता है (जब तक कि यह स्पष्ट रूप से एक ओएस निर्भर मॉड्यूल जैसे Win32) न हो।

+2

हालांकि यह सही जवाब होना चाहिए, प्रैक्टिस विक्रेताओं में जब वे पर्ल का निर्माण करते हैं तो वे निराशाजनक चीजें करते हैं। हमें मॉड्यूल :: कोरलिस्ट :: डेबियन जैसे मॉड्यूल की आवश्यकता होगी और इसी तरह :) –

0

इस के लिए एक सरल संदर्भ में Beginning Perl से है। यह माना जाता है कि यह पर्ल 5.6 पर लागू होता है, लेकिन, मेरे ज्ञान के लिए, पर्ल 5.8 ने इनमें से कोई भी नहीं हटाया और केवल नए लोगों को पेश किया (जैसे डाइजेस्ट :: एमडी 5, फाइल :: टेम्प, फ़िल्टर :: सरल, libnet, List :: Util, Memoize , एमआईएमई :: बेस 64, स्केलर :: उपयोग, स्टेलेबल, स्विच, टेस्ट :: अधिक, टेस्ट :: सरल, टेक्स्ट :: संतुलित, टाई :: फ़ाइल, आदि)

पर्ल के प्रत्येक संस्करण के लिए आप देख सकते हैं perldoc में। यहां list for perl 5.8.8

8

Module::CoreList पहले ही उल्लेख किया जा चुका है। चीजों को आसान बनाने के लिए यह command-line interface के साथ आता है। यह बहुत अच्छा है अगर आपने इसे पहले से इंस्टॉल किया है, या एक प्रोग्राम है जिसे यह पता लगाने की आवश्यकता है कि पर्ल के किसी विशेष संस्करण के साथ क्या नहीं आ सकता है।

यदि आप जानना चाहते हैं कि आपके विशेष संस्करण के साथ कौन से मॉड्यूल आते हैं, तो आप पूरी सूची के लिए कमांड लाइन पर perldoc perlmodlib चला सकते हैं। पर्ल के पुराने या नए संस्करणों के लिए, आप बस Perl's page on the CPAN पर जा सकते हैं और ड्रॉप-डाउन से इच्छित संस्करण (उदाहरण के लिए, 5.6.2) का चयन कर सकते हैं और फिर दस्तावेज़ में perlmodlib पृष्ठ पर नेविगेट कर सकते हैं। (perlmodlib टाइप करना आपके ब्राउज़र की टेक्स्ट खोज में मदद करेगा)।

आप क्योंकि यह पर्ल के एक पुराने संस्करण पर कोर नहीं है एक मॉड्यूल का उपयोग कर नहीं की सोच रहे हैं, तो आप PAR, the Perl Archiver उपयोग करते हुए, अपने अतिरिक्त निर्भरता बंडल करने पर विचार करना चाहते हो सकता है या यहां तक ​​कि अपने आप में पर्ल! पर्ल ट्रेनिंग ऑस्ट्रेलिया में Perl Tip on using PAR भी है जो PAR के साथ शुरू करने पर मूल बातें शामिल करता है।

सभी बहुत ही बेहतरीन,

पॉल

9

सही सीधे आगे जवाब पहले से ही दिया गया है, लेकिन मुझे लगता है कि आप गलत सवाल पूछा गया है। आप शायद केवल कोर मॉड्यूल का उपयोग करके विकसित करने की कोशिश कर रहे हैं। क्यूं कर? आप शायद ऐसा कर रहे हैं क्योंकि आप निर्भरताओं से निपटना नहीं चाहते हैं। क्यूं कर? क्योंकि वे गधे में दर्द हो सकते हैं। लेकिन CPAN के बिना पर्ल विकसित करना आधा शक्ति गुम है। आप खुद को अपंग कर रहे हैं। यह इसके लायक है।

अद्यतन: अब जब मैं आप जो करने की कोशिश कर रहा हूं उसके बारे में और अधिक जानता हूं, तो मैं सही सवाल का जवाब दे सकता हूं। सबसे पहले "जब मैं रूट नहीं करता हूं तो मैं मॉड्यूल कैसे स्थापित करूं?" इसका सरल उत्तर यह है:

perl Makefile.PL PREFIX=/some/path LIB=/some/path/lib 
...and all the rest as normal... 
MakeMaker आधारित मॉड्यूल के लिए

(उदारीकरण PREFIX INSTALL_BASE की अन्यथा अयथार्थ प्रकृति पसंद किया जाता है को नियंत्रित करने के लिए किया जाता है, लेकिन यह पीछे की ओर संगत नहीं है।)।

और इस मॉड्यूल के लिए ::

perl Build.PL --install_base=/some/path 

निर्माण और उसके बाद मॉड्यूल/कुछ/पथ/lib में हवा हो जाएगा और आप PERL5LIB वातावरण चर या use lib qw(/some/path/lib) अपने कोड में सेट कर सकते हैं।

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

वैकल्पिक रूप से, आप अपनी सामग्री को एक सीपीएएन मॉड्यूल के रूप में वितरित कर सकते हैं, निर्भरता के साथ पूर्ण हो सकते हैं, और एक सीपीएएन क्लाइंट उन्हें हल कर सकते हैं। आप इस प्रक्रिया को एक सीपीएएन क्लाइंट के बाहर करने के लिए Module::AutoInstall का भी उपयोग कर सकते हैं।

तो आप देखते हैं कि आप एक पर्ल ऐप शिपिंग करते समय केवल कोर मॉड्यूल का उपयोग करने के लिए प्रतिबंधित नहीं हैं।

+0

मैं प्रश्न के लिए थोड़ा और विवरण जोड़ूंगा। –

+0

धन्यवाद, अब मैं देखता हूं कि सही सवाल क्या है। :) – Schwern

+0

धन्यवाद, मैं वास्तव में स्थानीय रूप से किसी भी मॉड्यूल को स्थापित करने से बचना चाहता हूं, अगर मैं इसकी मदद कर सकता हूं क्योंकि प्लेटफॉर्म के मिश्रण और उनमें से एक पर कंपाइलर की कमी के कारण यह अधिक मूल्यवान लगता है (और मेरे पास नहीं है इस काम के लिए काफी समय)। तो मैं वास्तव में स्थापित करना चाहता हूं जो स्थापित है और/या शुद्ध perl। –

-1

यह सवाल अब एक छोटे से कम महत्वपूर्ण है (मैं अंतिम लक्ष्य मशीन पर रूट पहुँच तो मैं बस संकुल मैं जरूरत इंस्टॉल करने वाले है), लेकिन इस मामले में किसी को भी यहाँ दिलचस्पी है मैं क्या किया है:

पहले , प्रत्येक कोड को प्रत्येक सिस्टम पर चलाएं:

foreach my $dir (@INC) { 
    print "Directory: $dir\n"; 
    if (-d "$dir") { 
     my @modules = `find $dir/ -name "*.pm"`; 
     foreach my $m (@modules) { 
      my $label = $m; 
      $label =~ s|\n$||; 
      $label =~ s|//+|/|g; 
      $label =~ s|^$dir/||; 
      print "$label\n"; 
     } 
    } 
} 

नोट आपको एक खोज आदेश के साथ * निक्स सिस्टम की आवश्यकता है।आउटपुट को तीन फाइलों में डंप करें, क्रमबद्ध करें। तब (स्मृति से) इस तरह आदेशों का उपयोग:

grep -F -x -f list-1.txt list2.txt > list-12.txt 
grep -F -x -f list-12.txt list3.txt > list-123.txt 

अब सूची-123.txt साझा मॉड्यूल, कम या ज्यादा की सूची होनी चाहिए।

इसके लायक होने के लिए, सभी तीन प्रणालियों ने कुछ अतिरिक्त मॉड्यूल साझा किए हैं, विशेष रूप से एक्सएमएल :: पार्सर मॉड्यूल।

+1

यह अलग-अलग मशीनों के बीच साझा मॉड्यूल की एक सूची प्राप्त करता है, लेकिन यह नहीं कहता कि पर्ल के साथ क्या आता है। ओएस विक्रेता अधिक मॉड्यूल जोड़ते हैं। Sysadmins पैकेज और सीपीएएन से दोनों स्थापित करें। आप कुछ हद तक इसे उलझा सकते हैं। "Perl" और "विक्रेता" lib निर्देशिकाओं को देखो। लेकिन यह इसके लायक नहीं है। – Schwern

+0

रूट के रूप में मॉड्यूल स्थापित करना वैसे भी एक अच्छा विचार नहीं है। जब तक आप वास्तव में सिस्टम के एकाधिक उपयोगकर्ताओं के लिए उन मॉड्यूल को साझा नहीं करना चाहते हैं। एक उपयोगकर्ता के लिए, होम निर्देशिका के नीचे निर्देशिका में मॉड्यूल का स्थानीय इंस्टॉल आमतौर पर पर्याप्त और सुरक्षित होता है क्योंकि यह सिस्टम पैकेजिंग द्वारा प्रबंधित फ़ाइलों को दूषित करने का जोखिम नहीं लेता है। – dolmen

1

लगता है जैसे आप local::lib चाहते हैं। रूट के बिना सीपीए के सभी लाभ (और प्रणाली को छिद्रित छोड़ देता है)।

cpan -a 

ExtUtils :: स्थापित करता है, तो आप और अधिक परिष्कृत कुछ चाहिए आप मदद कर सकते हैं:

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