perl - क्या पर्ल डिफ़ॉल्ट रूप से @INC में वर्तमान निर्देशिका में शामिल नहीं है?




(2)

मैंने पैकेज नामों के पर्ल के संकल्प को पूरी तरह से समझा नहीं है, लेकिन मुझे हमेशा यह माना जाता है कि निम्न हमेशा से काम करना चाहिए, यह मानते हुए कि आप myscript.pl को उस निर्देशिका के भीतर से निष्पादित कर रहे हैं जिसमें यह शामिल है:

myscript.pl (contains the following statement: use Class1::Class2::Class3)
Class1/
    Class2/
        Class3.pm (contains the following package declaration: package Class1::Class2::Class3;)

हालांकि, यह मेरे कोड में काम नहीं कर रहा है क्योंकि Class3.pm स्थित नहीं किया जा सकता है। @ आईएनसी को देखकर, इसमें वर्तमान निर्देशिका शामिल नहीं है, केवल मेरी स्ट्राबेरी पर्ल स्थापना की विभिन्न निर्देशिकाएं

इसको हल करने का अनुशंसित तरीका क्या है? मुझे लगता है मैं आईएनसी को संशोधित कर सकता हूं या मैं FindBin का उपयोग शुरू कर सकता हूं, लेकिन मुझे यकीन नहीं है कि सबसे अच्छा कौन है मैं इस कोड को विरासत में मिला है और बस इसे एक नए स्थान पर स्थानांतरित कर रहा हूं, लेकिन यह पुराने कोड की तरह दिखता नहीं है, या तो इस तरह के समाधान की जरूरत है (मैं गलत हो सकता है, अभी भी देख रहा हूं ...)


पर्ल 5.26 ने @INC में @INC उपाय के रूप में वर्तमान कार्यरत निर्देशिका को निकाल दिया।

इसे 5.26 प्रतिलिपि नोट्स में समझाया गया है।


हां, सुरक्षा संबंधी कारणों से वर्तमान निर्देशिका को @INC से 5.26 में हटा दिया गया था।

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

use FindBin 1.51 qw( $RealBin );
use lib $RealBin;

या

use Cwd qw( abs_path );
use File::Basename qw( dirname );
use lib dirname(abs_path($0));




perl