2011-01-18 9 views
12

मैं कई मशीनों पर कुछ कोड तैनात करने के लिए तैयार हो रहा हूं। जहां तक ​​मुझे पता है, निर्भरता को ट्रैक करने के लिए Makefile.pm का उपयोग करना यह सुनिश्चित करने का सबसे अच्छा तरीका है कि वे हर जगह इंस्टॉल हैं। मेरी समस्या यह है कि मुझे यकीन नहीं है कि हमारे Makefile.pm को अपडेट किया गया है क्योंकि यह एप्लिकेशन कुछ अलग डेवलपर्स के माध्यम से पारित हो गया है।मैं पर्ल स्क्रिप्ट द्वारा उपयोग किए जाने वाले सभी मॉड्यूल कैसे ढूंढूं?

क्या मेरे स्रोत या मेरे प्रोग्राम के कुछ पूर्ण रनों के माध्यम से स्वचालित रूप से पार्स करने का कोई तरीका है यह निर्धारित करने के लिए कि मेरे आवेदन के मॉड्यूल के आधार पर वास्तव में कौन से संस्करण हैं? उस पर, CPAN पैकेज के आधार पर इसे फ़िल्टर करने का कोई तरीका है? (इसलिए कि मैं केवल मूस के साथ आने वाले प्रत्येक मॉड्यूल के बजाय Moose पर निर्भर करता हूं।)

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

उत्तर

12

बस स्पष्ट होना देखते हैं - आप सामान्य रूप से मॉड्यूल की एक सूची है कि एप्लिकेशन अकेले कोड विश्लेषण द्वारा पर निर्भर करता है नहीं मिल सकता है। जैसे यदि आपके ऐप्स eval { require $module; $module->import() } करते हैं, जहां $module कमांड लाइन के माध्यम से पारित किया जाता है, तो यह वास्तव में सभी मॉड्यूल मानों के साथ विशिष्ट कमांड लाइन संस्करण चलाकर पता लगाया जा सकता है।

आप ऐसा करना चाहते है, तो आप के माध्यम से चलाता है का एक संयोजन द्वारा प्रयोग किया जाता हर मॉड्यूल यह पता लगाने कर सकते हैं:

  1. Devel::Cover। कवरेज रिपोर्ट 100% मॉड्यूल का इस्तेमाल करेगी। लेकिन आपको संस्करण # एस नहीं मिला है।

  2. प्रिंट %INCहर एक संभव निकास बिंदु SLU के जवाब के रूप में कोड में में कहा। संभवतः END{} ब्लॉक के साथ-साथ __DIE__ हैंडलर में सभी संभव निकास बिंदुओं को कवर करने के लिए किया जाना चाहिए, और तब भी सामान्य मामले में 100% कवर नहीं हो सकता है यदि प्रोग्राम के भीतर कहीं आपके __DIE__ हैंडलर ओवरराइट हो जाता है।

  3. Devel::Modlist (भी SLU के जवाब ने उल्लेख किया) - नकारात्मक पक्ष Devel::Cover की तुलना में है कि यह में कई नमूना चलाता Devel::Cover की तरह करता है एक डेटाबेस एकत्र करने के लिए सक्षम होने के लिए प्रतीत नहीं होता है। प्लस तरफ, यह उद्देश्य-निर्मित है, इसलिए इसमें बहुत उपयोगी विकल्प हैं (सीपीएएन पथ, संस्करण)।

  4. कृपया ध्यान दें कि अन्य मॉड्यूल (Module::ScanDeps) आप मनमाने ढंग से आदेश पंक्ति तर्क के आधार पर क्रम विश्लेषण करने के लिए अनुमति देने के लिए प्रतीत नहीं होता है (उदाहरण के लिए यह केवल आप कोई तर्क के साथ कार्यक्रम पर अमल करने की अनुमति के लिए पहली नजर में लगता है) और यदि यह सत्य है, तो किसी भी कोड के लिए उपर्युक्त 3 विधियों से कम है जो संभावित रूप से मॉड्यूल को गतिशील रूप से लोड कर सकता है।

+0

इसे संक्षिप्त करने के लिए धन्यवाद। – slu

5

Module::ScanDeps - निर्भरता

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

+0

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

2

आप% कांग्रेस को देखो सकता है, http://www.perlmonks.org/?node_id=681911 जो भी कहा गया है Devel::Modlist

+0

'% INC' का उपयोग करने के साथ-साथ अन्य 2 मॉड्यूल का उपयोग करने के लिए चेतावनी के लिए मेरा उत्तर देखें। – DVK

0

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

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

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