पर्ल में, .pm (पर्ल मॉड्यूल) और .pl (पर्ल स्क्रिप्ट) फ़ाइल में क्या अंतर है?


88

.pm(पर्ल मॉड्यूल) और .pl(पर्ल स्क्रिप्ट) फ़ाइल के बीच अंतर क्या है ?

कृपया हमें यह भी बताएं कि हम 1फाइल से क्यों लौटते हैं। यदि 2 या कुछ और लौटाते हैं, तो यह कोई त्रुटि उत्पन्न नहीं कर रहा है, इसलिए हम 1पर्ल मॉड्यूल से क्यों लौटते हैं ?


11
1कोई बात नहीं। यह हो सकता है 2, यह हो सकता है "foo", यह हो सकता है ["a", "list"]। जो बात मायने रखती है, वह नहीं है 0, या ऐसा कुछ भी नहीं है जो असत्य के रूप में मूल्यांकन करता है, या useविफल होगा।
आमदन

.pl वास्तव में एक पर्ल लाइब्रेरी है - पर्ल स्क्रिप्ट्स, जैसे C प्रोग्राम्स या अन्य भाषाओं में लिखे गए प्रोग्राम, एक एंडिंग नहीं होती है, केवल ऑपरेटिंग सिस्टम को छोड़कर, जो कि एक कार्य के लिए आवश्यक है, जैसे कि विंडोज़।
मोनिका

जवाबों:


78

बहुत ही मूल में, आपके द्वारा उपयोग किए जाने वाले फ़ाइल एक्सटेंशन से कोई फर्क नहीं पड़ता है कि perlउन फ़ाइलों की व्याख्या कैसे की जाती है।

हालाँकि, .pmएक निश्चित निर्देशिका संरचना के बाद फाइलों में मॉड्यूल डालना जो पैकेज नाम का अनुसरण करता है, एक सुविधा प्रदान करता है। इसलिए, यदि आप एक मॉड्यूल है Example::Plot::FourDऔर आप इसे एक निर्देशिका में डाल Example/Plot/FourD.pmएक पथ में अपने में @INCतो, useऔर requireजब में के रूप में पैकेज का नाम दिया सही काम करेंगे use Example::Plot::FourD

फ़ाइल को किसी भी आरंभीकरण कोड के सफल निष्पादन को इंगित करने के लिए अंतिम विवरण के रूप में सही लौटना चाहिए, इसलिए यह ऐसी फ़ाइल को समाप्त करने के लिए प्रथागत है 1; जब तक कि आप यह सुनिश्चित नहीं करते हैं कि यह अन्यथा वापस आ जाएगी। 1;यदि आप अधिक कथन जोड़ते हैं तो यह बेहतर है कि आप इसे डालें ।

यदि EXPRएक नंगे तार है, तो requireएक ".pm" एक्सटेंशन मान लेता है और आपके लिए फ़ाइल नाम में "::" के साथ "" को बदल देता है, जिससे मानक मॉड्यूल लोड करना आसान हो जाता है। मॉड्यूल को लोड करने का यह रूप आपके नाम स्थान को बदलने का जोखिम नहीं उठाता है।

सभी useप्रदान किए गए पैकेज नाम से फ़ाइल नाम का पता लगाना है, requireयह एक BEGINब्लॉक में है और importपैकेज पर आह्वान करता है। आपको उपयोग न करने से नहीं useबल्कि उन चरणों को मैन्युअल रूप से लेने से रोकना है ।

उदाहरण के लिए, नीचे मैंने Example::Plot::FourDपैकेज को एक फ़ाइल में रखा है जिसे फ़ाइल t.plमें स्क्रिप्ट में लोड किया है s.pl

C:\Temp> cat t.pl
package Example::Plot::FourD;

use strict; use warnings;

sub new { bless {} => shift }

sub something { print "something\n" }

"Example::Plot::FourD"

C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;

BEGIN {
    require 't.pl';
}

my $p = Example::Plot::FourD->new;
$p->something;


C:\Temp> s
something

यह उदाहरण दिखाता है कि मॉड्यूल फ़ाइलों को समाप्त करने की आवश्यकता नहीं है 1, कोई भी सच्चा मूल्य होगा।


-2

A .pl एक एकल स्क्रिप्ट है।

.Pm ( पर्ल मॉड्यूल ) में आपके कार्य हैं जिन्हें आप अन्य पर्ल स्क्रिप्ट से उपयोग कर सकते हैं:

एक पर्ल मॉड्यूल पर्ल कोड का एक स्व-निहित टुकड़ा है जिसका उपयोग पर्ल प्रोग्राम या अन्य पर्ल मॉड्यूल द्वारा किया जा सकता है। यह वैचारिक रूप से सी लिंक लाइब्रेरी या सी ++ क्लास के समान है।


5
".Pl एक एकल स्क्रिप्ट है।" सच नहीं। यह केवल टूटे हुए ऑपरेटिंग सिस्टम पर है जिसे आपको .pl एक्सटेंशन के साथ पर्ल प्रोग्राम की पहचान करने की आवश्यकता है। और मूल रूप से .pl ने "पर्ल लाइब्रेरी" का संकेत दिया - बाहरी सबरूटीन्स जिसे आपने "आवश्यकता" या "डू" कमांड के साथ लोड किया था।
डेव क्रॉस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.