2010-08-04 28 views
76

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

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

+10

'1' कोई फर्क नहीं पड़ता। यह '2' हो सकता है, यह' foo "हो सकता है, यह' ["a", "list"] 'हो सकता है। क्या मायने रखता है कि यह '0' नहीं है, या कुछ भी जो गलत के रूप में मूल्यांकन करता है, या 'उपयोग' विफल हो जाएगा। – Amadan

+0

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

उत्तर

-2

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

.pm में (Perl Module) आप कार्यों है कि आप अन्य पर्ल स्क्रिप्ट से उपयोग कर सकते हैं:

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

+4

"ए .pl एक एकल स्क्रिप्ट है।" सच नहीं। यह केवल टूटे हुए ऑपरेटिंग सिस्टम पर है जिसे आपको .pl एक्सटेंशन के साथ पर्ल प्रोग्राम की पहचान करने की आवश्यकता है। और मूल रूप से।pl ने "पर्ल लाइब्रेरी" का संकेत दिया - बाहरी सबराउटिन जिन्हें आपने "आवश्यकता" या "डू" कमांड से लोड किया था। –

65

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

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

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

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

सभी use करता है एक BEGIN ब्लॉक में पैकेज का नाम से फ़ाइल नाम प्रदान की है, require यह पता लगा और पैकेज पर 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 में समाप्त करने के लिए की जरूरत नहीं है कि।

संबंधित मुद्दे