2010-01-21 12 views
6

क्या हर दूसरे पैकेज में वैश्विक एप्लिकेशन पैरामीटर को शामिल करने के लिए मॉड्यूल को कोड करने का एक मानक तरीका है? उदाहरण के लिए: use Config;?मैं पर्ल में विभिन्न पैकेजों के बीच वैश्विक मूल्य कैसे साझा कर सकता हूं?

एक साधारण पैकेज जिसमें केवल our चर शामिल हैं? केवल पढ़ने योग्य चर के बारे में क्या?

उत्तर

8

पहले से ही standard Config module है, इसलिए एक अलग नाम चुनें।

आप निम्नलिखित सामग्री के साथ MyConfig.pm है कहते हैं:

package MyConfig; 

our $Foo = "bar"; 

our %Baz = (quux => "potrzebie"); 

1; 

फिर अन्य मॉड्यूल

#! /usr/bin/perl 

use warnings; 
use strict; 

use MyConfig; 

print "Foo = $MyConfig::Foo\n"; 

print $MyConfig::Baz{quux}, "\n"; 

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

MyConfig.pm को तीन लाइनों जोड़ें:

package MyConfig; 

require Exporter; 
our @ISA = qw/ Exporter /; 
our @EXPORT = qw/ $Foo %Baz /; 

our $Foo = "bar"; 

our %Baz = (quux => "potrzebie"); 

1; 

अब पूरा पैकेज का नाम अब आवश्यक है:

#! /usr/bin/perl 

use warnings; 
use strict; 

use MyConfig; 

print "Foo = $Foo\n"; 

print $Baz{quux}, "\n"; 

आप एक जोड़ सकते हैं रीड-ओनली साथ MyConfig.pm को अदिश

our $READONLY; 
*READONLY = \42; 

यह perlmod में प्रलेखित है।

@MyConfig::EXPORT करने के लिए इसे जोड़ने के बाद, आप एक अलग मॉड्यूल में

$READONLY = 3; 

कोशिश कर सकते हैं, लेकिन आप एक विकल्प के रूप

Modification of a read-only value attempted at ./program line 12.

मिल जाएगा, तो आप constant का उपयोग कर MyConfig.pm स्थिरांक में घोषित कर सकता है मॉड्यूल और फिर उनको निर्यात करें।

+2

'निर्यातक' से विरासत प्राप्त करने के बजाय, आप बस अपनी 'आयात' विधि को पकड़ सकते हैं, जो आपको वास्तव में चाहिए। जैसे 'निर्यातक' आयात 'का उपयोग करें; ' – friedo

4

कॉन्फ़िगरेशन के लिए वैश्विक चर का उपयोग न करें और कोड के रूप में कॉन्फ़िगरेशन को सेट न करें। मेरे पास इस बारे में Mastering Perl में एक संपूर्ण अध्याय है।

इसके बजाय, एक कॉन्फ़िगरेशन क्लास बनाएं जो कॉन्फ़िगरेशन डेटा तक पहुंचने के लिए कोई अन्य पैकेज उपयोग कर सके। लंबी अवधि में यह एक ऐसा इंटरफ़ेस प्रदान करने के लिए बहुत आसान होगा जो आप बाद में बदलना चाहते हैं, जो आप अपने जीवन के बाकी हिस्सों के लिए समर्थन करने वाले चर नामों को स्कैटरिंग करके अपने आप को लॉक कर सकते हैं।

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

print "Hello!" unless $config->be_silent; 

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

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

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