2012-01-17 18 views
8

मैं/usr/स्थानीय/lib में अपने पर्ल मॉड्यूल बनाने के लिए कोशिश कर रहा हूँ/पर्लपर्ल मॉड्यूल उपयोग

मैं पर्यावरण चर PERL5LIB निर्धारित किया है: यदि मैं एक मॉड्यूल बनाने

$ env | grep PERL 
PERL5LIB=/usr/local/lib/perl 

: $ PERL5LIB/मेरी/ModuleTest.pm

$ ./test.pl 
Can't locate object method "new" via package "My::ModuleTest" (perhaps you forgot to load "My::ModuleTest"?) at ./test.pl line 8. 

test.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 
use My::ModuleTest; 

my $test = new My::ModuleTest; 
print $test->check; 

ModuleTest.pm:

package ModuleTest; 

use strict; 
use warnings; 

sub new { 
     my $class = shift; 
     my ($opts)= @_; 
     my $self = {}; 
     $self->{test} = "Hello World"; 

     return bless $self, $class; 
} 
sub check { 
     my $self = shift; 
     my ($opts) = @_; 

     return $self->{test}; 
} 
1; 

मैं पुस्तकालय पथ के रूप में $ PERL5LIB उपयोग करने के लिए मेरी मॉड्यूल उन्हें स्थापना निर्देशिका से अलग करने के लिए के लिए चाहते हैं।

पर्ल @INC:

$ perl -le 'print foreach @INC' 
/usr/local/lib/perl 
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi 
/usr/lib/perl5/site_perl/5.8.8 
/usr/lib/perl5/site_perl 
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi 
/usr/lib/perl5/vendor_perl/5.8.8 
/usr/lib/perl5/vendor_perl 
/usr/lib/perl5/5.8.8/i386-linux-thread-multi 
/usr/lib/perl5/5.8.8 
. 
+0

अजीब लगता है अपने मॉड्यूल की प्रथम पंक्ति: मेरी $ परीक्षण = नए मेरा :: ModuleTest; –

+2

ओविंड: यह काम करता है, हालांकि अधिकांश पर्ल कट्टरपंथी आपको कुछ नुकसान से बचने के लिए 'मेरा $ test = My :: मॉड्यूलटेस्ट-> नया();' का उपयोग करने की सलाह देंगे। – Konerak

उत्तर

10

अपनी फ़ाइल ModuleTest.pm में package My::ModuleTest; का प्रयास करें - आप पूरे नाम का उपयोग करना चाहिए।

+0

आप महोदय, जीत रहे हैं! – Mose

+1

धन्यवाद। महान सवाल बीटीडब्ल्यू - सभी जरूरी जानकारी वहां थीं, आपने जो कुछ भी कोशिश की है, उसे दिखाया है, हमें स्थिति को फिर से बनाने की इजाजत दी गई है, पूरी तरह से स्वरूपित है ... आप तेजी से उत्तर देने योग्य हैं:] – Konerak

+0

एक आखिरी सवाल है, जड़ के लिए जरूरी है PERL5LIB env वैरिएबल या क्या यह इसके पथ के हिस्से के रूप में/usr/local/lib/perl को देखेगा? – Mose

3

बदलें से

package ModuleTest; 

को
package My::ModuleTest; 
संबंधित मुद्दे