2010-08-03 16 views
5

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

क्या यह अलग करना संभव है कि स्क्रिप्ट एक स्टैंडअलोन प्रोग्राम के रूप में चलाया गया था या require ed/do किसी अन्य स्क्रिप्ट द्वारा संपादित किया गया था?

केवल एक चीज मैं मिल सकता है शीर्ष स्तर पर caller उपयोग करने के लिए किया गया था: स्टैंडअलोन कार्यक्रम किसी भी फोन करने वाले नहीं है, जबकि जब require एड caller शो जो मॉड्यूल लोड किया था। क्या कोई बेहतर समाधान है?

+0

मैंने नीचे उत्तर पोस्ट किया है, लेकिन यदि आप "निष्पादन पर्यावरण की सीमाओं" पर विस्तार कर सकते हैं, तो क्या उन सीमाओं के आसपास तरीके हो सकते हैं जो आपको उचित मॉड्यूल का उपयोग करने की अनुमति देंगे? Thx – DVK

+0

@DVK: मैं आपके उत्तर से वास्तव में खुश हूं। (न तो कॉलर() चेक का मेरा वाक्यविन्यास आपकी प्रतिक्रिया में उतना ही अच्छा है।) सीमा के बारे में। वास्तव में काफी मूर्खतापूर्ण: मैं निर्देशिका में एक और गैर-निष्पादन योग्य मॉड्यूल नहीं जोड़ सकता क्योंकि यह फ़ाइलों के लिए स्कैन किया गया है और सभी फ़ाइल नामों का विशेष अर्थ है। .pm जोड़कर अन्य स्क्रिप्ट को तोड़ता है जिन्हें मुझे संशोधित करने की अनुमति नहीं है। – Dummy00001

+1

@ एफएम के अनुसार, मेरा प्रश्न अनिवार्य रूप से http://stackoverflow.com/questions/1131304/ – Dummy00001

उत्तर

9

हां, आपका caller दृष्टिकोण सही था - यह brian d foy द्वारा "मॉड्यूलिनो" नामक एक तकनीक है। मैं अनुमान लगा रहा हूं कि ब्रायन ने इसका आविष्कार किया जब तक कि कोई मुझे इसके विपरीत नहीं बताता।

modulino का मुख्य काम कर भाग इस तरह दिखता है (अतः नीचे लिंक किए गए उत्तर को से):

"Modules as Programs" chapter from "Mastering Perl" book by brian d foy

"Scripts as Modules" article in Dr. Dobbs

"How a script becomes a module" article on perlmonks:

__PACKAGE__->run(@ARGV) unless caller; 
sub run { 
    my($class, @args) = @_; 
} 
1; 

यहाँ संदर्भ के एक जोड़े हैं

What should I put in my starter template for my Perl programs?

+1

+1 एक संबंधित प्रश्न है: http://stackoverflow.com/questions/1215657। – FMc

+1

टॉम क्रिस्सेन (मुझे लगता है) "मॉडुलिनो" – ysth

+1

से पहले इस कई वर्षों के लिए प्रोगोगोड शब्द बनाया गया था मैंने तकनीक का आविष्कार नहीं किया था। टॉम सी पहला व्यक्ति था जिसे मैंने देखा था। मैंने बस इसे लोकप्रिय बनाया। –

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