2010-03-18 16 views
6

आम तौर पर जब मैं पर्ल प्रोग्राम लिख रहा हूं। मैं निम्नलिखित पैकेज शामिल था।मैं अपने पैकेज आयात को एक कस्टम पैकेज में कैसे समूहित करूं?

use strict ; 
use warnings ; 
use Data::Dumper ; 

अब, मुझे यह चाहिए, मैं इस कार्यक्रम को हर कार्यक्रम के लिए शामिल नहीं करूंगा। उस
के लिए मेरे पास ये सभी पैकेज मेरे अपने पैकेज में होंगे। निम्नलिखित की तरह।

my_packages.pm

package my_packages ; 
{ 
use strict ; 
use warnings ; 
use Data::Dumper; 
} 
1; 

तो, सब से ऊपर संकुल है कि अगर मैं पर्ल कार्यक्रम में my_packages.pm जोड़ने के लिए, यह की जरूरत है।

असल में मैंने यह प्रयोग किया है। लेकिन मैं इन चीजों को पाने में सक्षम नहीं हूं। जिसका अर्थ है कि जब मैं my_packages का उपयोग कर रहा हूं। मैं "सख्त उपयोग, चेतावनियों का उपयोग, डेटा :: डूपर का उपयोग" की कार्यक्षमता प्राप्त करने में सक्षम नहीं हूं।

मुझे किसी ने इस समस्या से बाहर करने में मदद .....

+0

भी देखें http://stackoverflow.com/questions/1678263/ho w-can-i-expand-mooses-automatic-pragma-export, जो एक ही बात पर चर्चा करता है लेकिन मूस मॉड्यूल के बारे में चर्चा करता है। – Ether

उत्तर

5

ToolSet पर एक नज़र डालें, जो आपके लिए सभी गंदे आयात कार्य करता है।

फली से

प्रयोग उदाहरण:

एक टूलसेट बनाना:

# My/Tools.pm 
package My::Tools; 

use base 'ToolSet'; 

ToolSet->use_pragma('strict'); 
ToolSet->use_pragma('warnings'); 
ToolSet->use_pragma(qw/feature say switch/); # perl 5.10 

# define exports from other modules 
ToolSet->export(
'Carp'   => undef,  # get the defaults 
'Scalar::Util' => 'refaddr', # or a specific list 
); 

# define exports from this module 
our @EXPORT = qw(shout); 
sub shout { print uc shift }; 

1; # modules must return true 

एक टूलसेट का उपयोग करना:

use My::Tools; 

# strict is on 
# warnings are on 
# Carp and refaddr are imported 

carp "We can carp!"; 
print refaddr []; 
shout "We can shout, too!"; 

/I3az/

0

इस देखें:

package Foo; 

use warnings; 

sub import { 
    warnings->import; 
} 

1; 

और अब:

$ perl <<CUT 
> use Foo; 
> \$a = 5; # backslash just to keep the $ from being eaten by shell 
> CUT 
Name "main::a" used only once: possible typo at - line 2. 

Modern::Perl से लिया।

3

यह आपके अपेक्षा से कठिन है।

  • strict और warnings तरह pragmas के लिए आप उन के माध्यम से पारित कर सकते हैं।

  • उन मॉड्यूल के लिए जो ऑब्जेक्ट उन्मुख वाले कार्यों को निर्यात नहीं करते हैं, यह काम करेगा।

  • हालांकि डिफ़ॉल्ट रूप से निर्यात करने वाले मॉड्यूल के लिए, डेटा :: डम्पर (यह आपको कॉलर के पैकेज में Dumper() फ़ंक्शन देता है), यह कठिन है।

आप इसे Exporter बताकर काम जादू की अतिरिक्त परत है कि वहाँ कर सकते हैं:

तो तुम कर सकता है:

package my_packages; 

use strict; 
use warnings; 
use Data::Dumper; 
use IO::Socket; 


$Exporter::ExportLevel = 1; # Tell Exporter to export to the caller 

sub import { 

    # Enable this in the callers package 

    strict->import;  # pragma in caller 
    warnings->import;  # pragma in caller 
    Data::Dumper->import; # Adds Dumper() to caller 

    # No need for IO::Socket since it's OO. 

    return 1; 
} 

1; 

तीन मॉड्यूल के लिए, यह शायद ही लायक हो रहा है यह।

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