/ / मुझे कई पर्ल मॉड्यूल कैसे व्यवस्थित करने चाहिए? - पर्ल, पर्ल-मॉड्यूल

मुझे कई पर्ल मॉड्यूल कैसे व्यवस्थित करना चाहिए? - perl, perl-module

विचार करें कि मेरे पास 12 निर्देशिकाओं में 100 पर्ल मॉड्यूल हैं। लेकिन, मुख्य पर्ल स्क्रिप्ट को देखते हुए, यह 100 जैसा दिखता है use p1 ; use p2 ; आदि इस मुद्दे को हल करने का सबसे अच्छा तरीका क्या है?

उत्तर:

जवाब के लिए 8 № 1

यह मेरे लिए संभावना नहीं है कि आप "पुनः useसीधे अपने मुख्य कार्यक्रम में सभी 100 मॉड्यूल लें। यदि आपका प्रोग्राम मॉड्यूल A में एक फ़ंक्शन का उपयोग करता है, जो तब मॉड्यूल B से एक फ़ंक्शन को कॉल करता है, लेकिन मुख्य प्रोग्राम स्वयं मॉड्यूल बी में कुछ भी संदर्भ नहीं देता है, तो प्रोग्राम केवल होना चाहिए use A। यह नहीं होना चाहिए use B जब तक यह सीधे मॉड्यूल बी से कुछ भी नहीं कहता है।

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

(और, हां, मुझे एहसास है कि 100 शायद एक अतिशयोक्ति थी, लेकिन, अगर आप "मॉड्यूल की संख्या के बारे में असहज हो रहे हैं" useआपके कोड द्वारा घ, तो यह आमतौर पर एक मजबूत संकेत है कि प्रश्न में कोड एक ही स्थान पर बहुत अधिक करने की कोशिश कर रहा है और मॉड्यूल के संग्रह में टूट जाना चाहिए।


जवाब के लिए 4 № 2

सब डाल दो use एक फ़ाइल में बयान, मॉडेम कहते हैं:

package Mods;

use Mod1;
use Mod2;
...

और फ़ाइल को अपनी मुख्य स्क्रिप्ट में शामिल करें:

use Mods;

जवाब के लिए 2 № 3

मैं यूजीन के समाधान का समर्थन करता हूं, लेकिन आप समूह को समूह बना सकते हैं use विषय द्वारा फाइलों में बयान, जैसे:

package Math;

use ModMatrix;
use ModFourier;
...

और निश्चित रूप से आपको मॉड्यूल और मॉड-संग्रह को सार्थक नाम देना चाहिए।


उत्तर के लिए 1 № 4

यूजीन y के रूप में एक अलग फ़ाइल में उपयोग बयानों के सभी डाल शायद सबसे अच्छा तरीका है। आप थोड़े मेटा प्रोग्रामिंग के साथ उस मॉड्यूल में टाइपिंग को कम कर सकते हैं:

package Mods;
require Exporter;
our @ISA = "Exporter";

my @packages = qw/Mod1 Mod2 Mod3 .... /;
# or  map {"Mod$_"} 1 .. 100  if your modules are actually named that way

for (@packages) {
eval "require $_" or die $@;  # "use" means "require pkg; pkg->import()"
$_->import();                 # at compile time
}

our @EXPORT = grep {*{$Mods::{$_}}{CODE}} keys %Mods::; # grab imported subs
#or @EXPORT_OK