Perl Language
पैकेज और मॉड्यूल
खोज…
वाक्य - विन्यास
- मॉड्यूल की आवश्यकता :: नाम; # @INC से नाम की आवश्यकता है
- "पथ / / से / फ़ाइल .pm" की आवश्यकता है; # @INC से सापेक्ष पथ की आवश्यकता है
- मॉड्यूल का उपयोग करें :: नाम; BEGIN में # आवश्यकता और डिफ़ॉल्ट आयात
- उपयोग मॉड्यूल :: नाम (); # आवश्यकता है और BEGIN में कोई आयात नहीं
- मॉड्यूल का उपयोग करें :: नाम (@ARGS); BEGIN में args के साथ # आवश्यकता और आयात
- मॉड्यूल का उपयोग करें :: नाम संस्करण; # आवश्यकता, संस्करण की जाँच, और BEGIN में डिफ़ॉल्ट आयात
- मॉड्यूल का उपयोग करें :: नाम संस्करण (); # आवश्यकता है, संस्करण की जांच, और BEGIN पर कोई आयात नहीं
- मॉड्यूल का उपयोग करें :: नाम संस्करण (@ARGS); # आवश्यकता है, संस्करण की जांच, BEGIN पर आर्ग के साथ आयात
- "पथ / को / file.pl" करें; # दी गई फ़ाइल को लोड करें और निकालें
किसी अन्य फ़ाइल की सामग्री को निष्पादित करना
do './config.pl';
यह config.pl फ़ाइल की सामग्री में पढ़ेगा और इसे निष्पादित करेगा। (यह भी देखें: perldoc -f do
।)
NB: जब तक कोई त्रुटि जाँच न हो, गोल्फिंग या कुछ और do
बचें। लाइब्रेरी मॉड्यूल शामिल करने के लिए, उपयोग या require
use
।
रनटाइम पर एक मॉड्यूल लोड हो रहा है
require Exporter;
यह सुनिश्चित करेगा कि Exporter
मॉड्यूल रनटाइम पर लोड किया गया है अगर यह पहले से ही आयात नहीं किया गया है। (यह भी देखें: perldoc -f require
।)
एनबी: अधिकांश उपयोगकर्ताओं को उनकी require
बजाय मॉड्यूल का use
करना चाहिए। use
विपरीत, require
को मॉड्यूल के आयात विधि को कॉल नहीं करना है और रनटाइम पर निष्पादित किया जाता है, संकलन के दौरान नहीं।
लोडिंग मॉड्यूल का यह तरीका उपयोगी है यदि आप तय नहीं कर सकते हैं कि रनटाइम से पहले आपको किन मॉड्यूलों की आवश्यकता है, जैसे कि एक प्लगइन सिस्टम के साथ:
package My::Module;
my @plugins = qw( One Two );
foreach my $plugin (@plugins) {
my $module = __PACKAGE__ . "::Plugins::$plugin";
$module =~ s!::!/!g;
require "$module.pm";
}
यह My::Package::Plugins::One
और My::Package::Plugins::Two
लोड करने का प्रयास करेगा। @plugins
निश्चित रूप से कुछ उपयोगकर्ता इनपुट या एक विन्यास फाइल से आना चाहिए ताकि समझ में आ सके। प्रतिस्थापन संचालक पर ध्यान दें s!::!/!g
प्रत्येक कॉलन के जोड़े को एक स्लैश के साथ बदल देता है। ऐसा इसलिए है क्योंकि आप परिचित मॉड्यूल नाम सिंटैक्स का उपयोग करके मॉड्यूल को लोड कर सकते use
केवल अगर मॉड्यूल नाम एक नंगेपन है। यदि आप एक स्ट्रिंग या एक वैरिएबल पास करते हैं, तो उसमें एक फ़ाइल नाम होना चाहिए।
मॉड्यूल का उपयोग करना
use Cwd;
यह संकलन समय पर Cwd
मॉड्यूल को आयात करेगा और इसके डिफ़ॉल्ट प्रतीकों को आयात करेगा, अर्थात मॉड्यूल के कुछ चर और फ़ंक्शन को इसका उपयोग करके कोड को उपलब्ध Cwd
। (यह भी देखें: perldoc -f use
।)
आम तौर पर यह सही काम करेगा। कभी-कभी, हालांकि, आप नियंत्रित करना चाहेंगे कि कौन से प्रतीक आयात किए गए हैं। निर्यात करने के लिए मॉड्यूल नाम के बाद प्रतीकों की एक सूची जोड़ें:
use Cwd 'abs_path';
यदि आप ऐसा करते हैं, तो केवल आपके द्वारा निर्दिष्ट प्रतीक आयात किए जाएंगे (यानी, डिफ़ॉल्ट सेट आयात नहीं किया जाएगा)।
कई प्रतीकों को आयात करते समय, qw()
सूची-निर्माण निर्माण का उपयोग करना मुहावरेदार है:
use Cwd qw(abs_path realpath);
कुछ मॉड्यूल अपने प्रतीकों का एक सबसेट निर्यात करते हैं, लेकिन सब कुछ के साथ निर्यात करने के लिए कहा जा सकता है :all
:
use Benchmark ':all';
(ध्यान दें कि सभी मॉड्यूल पहचान नहीं करते हैं या उपयोग नहीं करते हैं :all
टैग)।
एक निर्देशिका के अंदर एक मॉड्यूल का उपयोग करना
use lib 'includes';
use MySuperCoolModule;
use lib 'includes';
रिश्तेदार निर्देशिका को @INC
में एक अन्य मॉड्यूल खोज पथ के रूप में includes/
करता है। तो मान लें कि आपके पास एक मॉड्यूल फ़ाइल MySyperCoolModule.pm
अंदर includes/
, जिसमें शामिल हैं:
package MySuperCoolModule;
यदि आप चाहें, तो आप एक ही निर्देशिका के अंदर अपने स्वयं के कई मॉड्यूल को समूह बना सकते हैं और उन्हें एक use lib
साथ use lib
कर सकते हैं।
इस बिंदु पर, मॉड्यूल में सबरूटीन्स का उपयोग करने के लिए पैकेज नाम के साथ सबरूटीन नाम को उपसर्ग करना होगा:
MySuperCoolModule::SuperCoolSub_1("Super Cool String");
उपसर्गों का उपयोग उपसर्ग के बिना करने में सक्षम होने के लिए, आपको सबरूटीन नामों को निर्यात करने की आवश्यकता है ताकि उन्हें प्रोग्राम द्वारा कॉल करके पहचाना जाए। निर्यात को स्वचालित होने के लिए सेट किया जा सकता है, इस प्रकार:
package MySuperCoolModule;
use base 'Exporter';
our @EXPORT = ('SuperCoolSub_1', 'SuperCoolSub_2');
फिर फ़ाइल में जो मॉड्यूल का use
करता है, वे सबरूटीन स्वचालित रूप से उपलब्ध होंगे:
use MySuperCoolModule;
SuperCoolSub_1("Super Cool String");
या आप इस तरह से उप-निर्यात को सशर्त रूप से निर्यात करने के लिए मॉड्यूल सेट कर सकते हैं:
package MySuperCoolModule;
use base 'Exporter';
our @EXPORT_OK = ('SuperCoolSub_1', 'SuperCoolSub_2');
किस स्थिति में, आपको स्पष्ट रूप से वांछित सबरूटीन्स का अनुरोध करने की आवश्यकता है जो स्क्रिप्ट में निर्यात किए जाते हैं जो मॉड्यूल का use
करते हैं:
use MySuperCoolModule 'SuperCoolSub_1';
SuperCoolSub_1("Super Cool String");
CPAN.pm
CPAN.pm
एक पर्ल मॉड्यूल है जो CPAN साइटों से मॉड्यूल को क्वेरी और इंस्टॉल करने की अनुमति देता है।
यह इंटरेक्ट मोड को सपोर्ट करता है जो कि इनवैलिड है
cpan
या
perl -MCPAN -e shell
क्वेरी मॉड्यूल
नाम से:
cpan> m MooseX::YAML
मॉड्यूल नाम के खिलाफ एक रेगेक्स द्वारा:
cpan> m /^XML::/
नोट: पेजर या फ़ाइल उपयोग के लिए पुनर्निर्देशन सक्षम करने के लिए |
या >
शेल पुनर्निर्देशन (रिक्त स्थान अनिवार्य हैं |
और >
), उदाहरण के लिए: m /^XML::/ | less
।
वितरण द्वारा:
cpan> d LMC/Net-Squid-Auth-Engine-0.04.tar.gz
मॉड्यूल स्थापित करना
नाम से:
cpan> install MooseX::YAML
वितरण द्वारा:
cpan> install LMC/Net-Squid-Auth-Engine-0.04.tar.gz
सभी स्थापित मॉड्यूल की सूची बनाएं
कमांड लाइन से:
cpan -l
एक पर्ल स्क्रिप्ट से:
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();