संभवतः आपके धक्का काम नहीं करने का कारण निष्पादन का आदेश है।
use
एक संकलन समय निर्देश है। आप push
निष्पादन समय पर किया जाता है:
push (@INC,"directory_path/more_path");
use Foo.pm; # In directory path/more_path
आप एक शुरू ब्लॉक का उपयोग कर सकते इस समस्या को हल पाने के लिए:
BEGIN {
push (@INC,"directory_path/more_path");
}
use Foo.pm; # In directory path/more_path
IMO, यह use lib
को स्पष्ट है, और इसलिए सबसे अच्छा:
use lib "directory_path/more_path";
use Foo.pm; # In directory path/more_path
BEGIN और अन्य विशेष ब्लॉक और जब वे निष्पादित करते हैं, तो जानकारी के लिए perlmod देखें।
संपादित
के लिए अपनी स्क्रिप्ट/पुस्तकालय के लिए लोड हो रहा है कोड रिश्तेदार, मैं दृढ़ता से File::FindLib
आप use File::FindLib 'my/test/libs';
कह सकते हैं पथ में अपनी स्क्रिप्ट के ऊपर कहीं भी एक पुस्तकालय निर्देशिका के लिए देखने के लिए समर्थन करते हैं।
/home/me/projects/
|- shared/
| |- bin/
| `- lib/
`- ossum-thing/
`- scripts
|- bin/
`- lib/
एक स्क्रिप्ट के अंदर ossum-thing/scripts/bin
में:
मान लें कि आपका काम इस तरह संरचित है
use File::FindLib 'lib/';
use File::FindLib 'shared/lib/';
अपने पुस्तकालय निर्देशिका ढूंढने और उन्हें अपनी @INC
में जोड़ देगा।
यह मॉड्यूल बनाने के लिए भी उपयोगी है जिसमें आपके पर्यावरण के सेट को चलाने के लिए आवश्यक सभी पर्यावरण सेट-अप शामिल हैं और इसे अपने प्रोजेक्ट में सभी एक्जिक्यूटिव में लोड करें।
use File::FindLib 'lib/MyEnvironment.pm'
कई प्रयासों के बाद जो कोड आखिरकार काम करता था, उस सवाल से था कि एंडोमर से जुड़ा हुआ है: FindBin का उपयोग करें; # इस स्क्रिप्ट्यूज lib का पता लगाएं "$ FindBin :: बिन/.."; # मूल निर्देशिका ईपीएमएस का उपयोग करें; आपकी सभी मदद के लिए धन्यवाद! –
चीयर्स, हर किसी को "वर्तमान निर्देशिका" पढ़ने जैसा लगता है जहां आपने "मॉड्यूल की निर्देशिका" लिखा था। – Andomar
http://stackoverflow.com/a/90721/2668831 पढ़ने के बाद इस पर आया जो दावा करता है कि मॉड्यूलर पर्ल संगठन के कुछ रूपों के लिए FindBin विधि मजबूत नहीं है (कोई और स्पष्टीकरण करने में सक्षम हो सकता है) –