2017-04-20 9 views
8

में निर्यातक के साथ एकाधिक पैकेज मैं पर्ल निर्यातक से परिचित होने की कोशिश कर रहा हूं, जिस मुद्दे का मैं सामना कर रहा हूं वह है जो भी मैं कोशिश करता हूं मैं इसमें एकाधिक पैकेज वाले मॉड्यूल के साथ निर्यातक का उपयोग नहीं कर सकता। मैं नीचे क्या खो रहा हूँ?पर्ल

MyModule.pm 

use strict; 
use warnings; 

package Multipackage1; 
use Exporter; 
our @ISA = qw(Exporter); 
our @EXPORT = qw(test1); 

sub test1 { 

    print "First package\n"; 

} 

1; 

package Multipackage2; 
use Exporter; 
our @ISA = qw(Exporter); 
our @EXPORT = qw(test2); 

sub test2 { 

    print "Second package\n"; 

} 

1; 

package Multipackage3; 
use Exporter; 
our @ISA = qw(Exporter); 
our @EXPORT_OK = qw(test3); 

sub test3 { 

    print "Third package\n"; 

} 

1; 


MyMainFile.pl 

#!/usr/bin/perl 

use strict; 
use warnings; 
use Multipackage; 
use Multipackage qw(test3); 

print "Calling first package:\n"; 
test1(); 
print "Calling second package:\n"; 
test2(); 
print "Calling third package:\n"; 
test3(); 

मुझे परीक्षा 1 प्राप्त करना मुख्य पैकेज का हिस्सा नहीं है।

अग्रिम धन्यवाद।

+1

स्टैक ओवरफ़्लो और पर्ल टैग में आपका स्वागत है। यह एक बहुत अच्छा पहला सवाल है। :) – simbabque

+1

thnq इसके भाग के लिए बहुत रोमांचित .. शायद बी shld बहुत जल्द अलग हो गया है। –

+1

बस एक बात: जब लोग यहां पूर्ण वाक्यों और शब्दों को लिखते हैं तो हम इसे पसंद करते हैं। यहां बहुत सारे पेशेवर डेवलपर्स हैं, और इनमें से बहुत से कार्य संदर्भ में उपयोग किया जाता है। कृपया अपना समय लें और विराम चिह्न और सामान का उपयोग करें। :) – simbabque

उत्तर

8

userequire कहता है, जो पैकेज का नाम के साथ एक फ़ाइल (और :: के लिए / + .pm के साथ) के लिए लग रहा है।

तो require पैकेज के साथ वास्तविक फ़ाइल और import पैकेज से वास्तविक फ़ाइल।

main.pl

use warnings; 
use strict; 

require MyModule; 

import Multipackage1; 
import Multipackage2; 
import Multipackage3 qw(test3); 

print "Calling first package:\n"; 
test1(); 
print "Calling second package:\n"; 
test2(); 
print "Calling third package:\n"; 
test3(); 

MyModule.pm में, अपने स्वयं के ब्लॉक में प्रत्येक पैकेज जगह, शाब्दिक चर के लिए गुंजाइश प्रदान करने के लिए के बाद से package कि नहीं करता है। चूंकि v5.14 (मुझे लगता है) आप package Pack { ... } के साथ यह अच्छी तरह से कर सकते हैं। उन सभी 1 एस की कोई आवश्यकता नहीं है, और आप ब्लॉक से use Exporter; खींच सकते हैं।

आउटपुट

 
Calling first package: 
First package 
Calling second package: 
Second package 
Calling third package: 
Third package 

अभी तक बेहतर, एक ही उत्पादन के साथ के लिए

use strict; 
use warnings; 

package Multipackage1 { 
    use Exporter qw(import); 
    our @EXPORT = qw(test1); 

    sub test1 { print "First package\n" } 
} 
... 
1; 

use Exporter qw(import); साथ our @ISA = qw(Exporter); बदलें।

ध्यान दें कि एक फ़ाइल में एकाधिक पैकेज डालने की सामान्य रूप से आवश्यकता नहीं होती है और नहीं किया जाता है।

+0

Thanx बहुत कुछ यह पूरी तरह से काम कर रहा है .. :) –