पर्ल: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 259: Line 259:
पर्ल को प्रायः भाषा के रूप में प्रयोग किया जाता है, जो सिस्टम और इंटरफेस को जोड़ता है जिसे विशेष रूप से इंटरऑपरेट करने के लिए डिज़ाइन नहीं किया गया था, और डेटा मंगिंग के लिए,<ref>{{cite web |url = http://books.perl.org/book/95 |title = पर्ल बुक्स - बुक: पर्ल के साथ डेटा मुंगिंग|work = Perl.org |access-date = December 30, 2010 |archive-date = September 7, 2011 |archive-url = https://web.archive.org/web/20110907020511/http://books.perl.org/book/95 |url-status = live }}</ref>अर्थात रिपोर्ट बनाने जैसे कार्यों के लिए बड़ी मात्रा में डेटा को परिवर्तित या संसाधित करना। वास्तव में, ये शक्तियाँ घनिष्ठ रूप से जुड़ी हुई हैं। संयोजन पर्ल को सिस्टम प्रशासकों के लिए लोकप्रिय सर्व-उद्देश्यीय भाषा बनाता है, विशेष रूप से क्योंकि छोटे लघु, जिन्हें प्रायः [[एक-लाइनर कार्यक्रम|एक-लाइनर प्रोग्राम]] कहा जाता है, में प्रवेश किया जा सकता है और [[कमांड लाइन इंटरफेस]] पर चलाया जा सकता है।{{cn|date=December 2020}}  
पर्ल को प्रायः भाषा के रूप में प्रयोग किया जाता है, जो सिस्टम और इंटरफेस को जोड़ता है जिसे विशेष रूप से इंटरऑपरेट करने के लिए डिज़ाइन नहीं किया गया था, और डेटा मंगिंग के लिए,<ref>{{cite web |url = http://books.perl.org/book/95 |title = पर्ल बुक्स - बुक: पर्ल के साथ डेटा मुंगिंग|work = Perl.org |access-date = December 30, 2010 |archive-date = September 7, 2011 |archive-url = https://web.archive.org/web/20110907020511/http://books.perl.org/book/95 |url-status = live }}</ref>अर्थात रिपोर्ट बनाने जैसे कार्यों के लिए बड़ी मात्रा में डेटा को परिवर्तित या संसाधित करना। वास्तव में, ये शक्तियाँ घनिष्ठ रूप से जुड़ी हुई हैं। संयोजन पर्ल को सिस्टम प्रशासकों के लिए लोकप्रिय सर्व-उद्देश्यीय भाषा बनाता है, विशेष रूप से क्योंकि छोटे लघु, जिन्हें प्रायः [[एक-लाइनर कार्यक्रम|एक-लाइनर प्रोग्राम]] कहा जाता है, में प्रवेश किया जा सकता है और [[कमांड लाइन इंटरफेस]] पर चलाया जा सकता है।{{cn|date=December 2020}}  


पर्ल कोड को माइक्रोसॉफ्ट विंडोज और यूनिक्स में पोर्टेबल बनाया जा सकता है; इस तरह के कोड का उपयोग प्रायः सॉफ्टवेयर के आपूर्तिकर्ताओं द्वारा किया जाता है (दोनों वाणिज्यिक ऑफ-द-शेल्फ और बीस्पोक) सॉफ्टवेयर निर्माण और परिनियोजन-स्क्रिप्ट की पैकेजिंग और सुरक्षा को सरल बनाने के लिए।{{cn|date=December 2020}}
पर्ल कोड को माइक्रोसॉफ्ट विंडोज और यूनिक्स में पोर्टेबल बनाया जा सकता है; इस प्रकार के कोड का उपयोग प्रायः सॉफ्टवेयर के आपूर्तिकर्ताओं द्वारा किया जाता हैI जिससे सॉफ्टवेयर निर्माण और परिनियोजन-स्क्रिप्ट की पैकेजिंग और सुरक्षा को सरल बनाया जा सके।{{cn|date=December 2020}}  
Tk (ढांचा)| Perl/Tk और [[wxPerl]] सामान्यतः पर्ल स्क्रिप्ट में ग्राफिकल यूजर इंटरफेस जोड़ने के लिए उपयोग किए जाते हैं।
 
पर्ल /टीके और [[wxPerl|डब्लूएक्सपर्ल]] का उपयोग सामान्यतः पर्ल स्क्रिप्ट में ग्राफिकल यूजर इंटरफेस जोड़ने के लिए किया जाता है।


=== कार्यान्वयन ===
=== कार्यान्वयन ===
पर्ल को एक कोर इंटरप्रेटर के रूप में लागू किया गया है, जिसे C में लिखा गया है, साथ में पर्ल और C में लिखे मॉड्यूल का एक बड़ा संग्रह है। {{As of|2010}}, दुभाषिया C कोड की 150,000 पंक्तियों का है और विशिष्ट मशीन आर्किटेक्चर पर 1 एमबी निष्पादन योग्य के लिए संकलित करता है। वैकल्पिक रूप से, दुभाषिया को एक लिंक लाइब्रेरी में संकलित किया जा सकता है और अन्य कार्यक्रमों में अंतर्निहित किया जा सकता है। वितरण में लगभग 500 अनुखंड हैं, जिसमें पर्ल की 200,000 लाइनें और C कोड की अतिरिक्त 350,000 लाइनें सम्मिलित हैं (अनुखंड में अधिकांश C कोड में [[अक्षरों को सांकेतिक अक्षरों में बदलना]] का टेबल होते हैं)।{{cn|date=December 2020}} दुभाषिया में ऑब्जेक्ट-ओरिएंटेड आर्किटेक्चर होता है। पर्ल भाषा के सभी तत्व - स्केलर, सरणियाँ, हैश, कोडरेफ़्स, [[फ़ाइल संभाल]] - दुभाषिया में [[संरचना (सी प्रोग्रामिंग भाषा)]] द्वारा दर्शाए गए हैं। इन संरचनाओं पर संचालन [[मैक्रो (कंप्यूटर विज्ञान)]], टाइपपीफ और कार्यों के एक बड़े संग्रह द्वारा परिभाषित किया गया है; ये पर्ल C [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] का गठन करते हैं। पर्ल एपीआई शुरुआत न करने वालों के लिए आश्चर्यजनक हो सकती है, लेकिन इसके प्रवेश बिंदु एक सुसंगत [[नामकरण योजना]] का पालन करते हैं, जो इसका उपयोग करने वालों को मार्गदर्शन प्रदान करता है।{{cn|date=December 2020}} एक पर्ल दुभाषिया का जीवन सामान्यतः संकलन चरण और रन चरण में विभाजित होता है।<ref>A description of the Perl 5 interpreter can be found in ''Programming Perl'', 3rd Ed., chapter 18. See particularly page 467, which carefully distinguishes run phase and compile phase from [[Run time (program lifecycle phase)|run time]] and [[compile time]].  Perl "time" and "phase" are often confused.</ref> पर्ल में, चरण दुभाषिया के जीवन-चक्र में प्रमुख चरण हैं। प्रत्येक दुभाषिया प्रत्येक चरण से केवल एक बार गुजरता है, और चरण एक निश्चित क्रम में अनुसरण करते हैं।{{cn|date=December 2020}} पर्ल के संकलन चरण में जो कुछ होता है वह संकलन है, और पर्ल के रन चरण में जो कुछ होता है वह निष्पादन है, लेकिन यह महत्वपूर्ण अपवाद हैं। संकलन चरण के समय पर्ल कोड को निष्पादित करने के लिए पर्ल अपनी क्षमता का महत्वपूर्ण उपयोग करता है। पर्ल रन चरण में संकलन में भी देरी करेगा। वे शब्द जो उस प्रकार के प्रसंस्करण को इंगित करते हैं जो वास्तव में किसी भी समय हो रहा है, जो संकलन समय और रन टाइम हैं। संकलन चरण के समय अधिकांश बिंदुओं पर पर्ल संकलन समय में है, लेकिन रन चरण के समय संकलन समय भी लिपिबद्ध किया जा सकता है। एक स्ट्रिंग तर्क में कोड के लिए संकलन समय पास किया गया <code>[[eval]]</code> बिल्ट-इन रन चरण के समय होता है। संकलन चरण के समय पर्ल प्रायः रन टाइम में होता है और अधिकांश रन चरण रन टाइम में खर्च करता है। संकलन चरण में कोड में <code>BEGIN</code> ब्लॉक रन टाइम पर निष्पादित होते हैं।<!-- NOTE TO EDITORS:  There is something missing in the preceding sentence -- for one thing, a comma before the conjunction.  The sentence might reasonably read 'Code in BEGIN blocks executes NOT at run time, but in the compile phase,' but is that what the author intended? -->संकलन समय पर, दुभाषिया पर्ल कोड को [[सार वाक्य रचना का पेड़|सार वाक्य रचना का ट्री]] में पार्स करता है। रनटाइम पर, यह [[ट्री ट्रैवर्सल]] द्वारा प्रोग्राम को निष्पादित करता है। पाठ को केवल एक बार पार्स किया जाता है, और सिंटैक्स ट्री निष्पादित होने से पहले अनुकूलन के अधीन होता है, ताकि निष्पादन अपेक्षाकृत कुशल हो। प्रारूप ट्री पर संकलन-समय के अनुकूलन में [[निरंतर तह]] और संदर्भ प्रसार सम्मलित है, लेकिन [[पीपहोल अनुकूलन]] भी किया जाता है।<ref>{{Cite web|title=पर्लगट्स - पर्ल एपीआई का परिचय - पर्लडॉक ब्राउज़र|url=https://perldoc.perl.org/perlguts#Compile-pass-3:-peephole-optimization|access-date=2022-01-24|website=perldoc.perl.org}}</ref>
पर्ल को कोर इंटरप्रेटर के रूप में लागू किया गया है, जिसे सी में लिखा गया है, साथ में पर्ल और सी में लिखे मॉड्यूल का बड़ा संग्रह है। {{As of|2010}}, दुभाषिया सी कोड की 150,000 पंक्तियां है और विशिष्ट मशीन आर्किटेक्चर पर 1 एमबी निष्पादन योग्य संकलित करता है। वैकल्पिक रूप से, दुभाषिया को लिंक लाइब्रेरी में संकलित किया जा सकता है और अन्य प्रोग्राम्स में अंतर्निहित किया जा सकता है। वितरण में लगभग 500 मॉड्यूल हैं, जिसमें पर्ल की 200,000 पंक्तियां और सी कोड की अतिरिक्त 350,000 पंक्तियां सम्मिलित हैं (मॉड्यूल में अधिकांश सी कोड में [[अक्षरों को सांकेतिक अक्षरों में बदलना|अक्षरों को सांकेतिक अक्षरों में बदलने]] का टेबल होते हैं)।{{cn|date=December 2020}} दुभाषिया में ऑब्जेक्ट-ओरिएंटेड आर्किटेक्चर होता है। पर्ल भाषा के सभी तत्व - स्केलर, सरणियाँ, हैश, कोडरेफ़्स, [[फ़ाइल संभाल|फ़ाइल हैंडल]]-[[संरचना (सी प्रोग्रामिंग भाषा)]] द्वारा दुभाषिया में  द्वारा दर्शाए गए हैं। इन संरचनाओं पर संचालन [[मैक्रो (कंप्यूटर विज्ञान)]], टाइपपीफ और कार्यों के बड़े संग्रह द्वारा परिभाषित किया गया है; ये पर्ल सी [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] का गठन करते हैं। पर्ल एपीआई प्रारम्भ न करने वालों के लिए आश्चर्यजनक हो सकती है, लेकिन इसके प्रवेश बिंदु सुसंगत [[नामकरण योजना]] का पालन करते हैं, जो इसका उपयोग करने वालों को मार्गदर्शन प्रदान करता है।{{cn|date=December 2020}}  
 
एक पर्ल दुभाषिया का जीवन सामान्यतः संकलन चरण और रन चरण में विभाजित होता है।<ref>A description of the Perl 5 interpreter can be found in ''Programming Perl'', 3rd Ed., chapter 18. See particularly page 467, which carefully distinguishes run phase and compile phase from [[Run time (program lifecycle phase)|run time]] and [[compile time]].  Perl "time" and "phase" are often confused.</ref> पर्ल में, चरण दुभाषिया के जीवन-चक्र में प्रमुख चरण हैं। प्रत्येक दुभाषिया प्रत्येक चरण से केवल एक बार गुजरता है, और चरण एक निश्चित क्रम में अनुसरण करते हैं।{{cn|date=December 2020}} पर्ल के संकलन चरण में जो कुछ होता है वह संकलन है, और पर्ल के रन चरण में जो कुछ होता है वह निष्पादन है, लेकिन यह महत्वपूर्ण अपवाद हैं। संकलन चरण के समय पर्ल कोड को निष्पादित करने के लिए पर्ल अपनी क्षमता का महत्वपूर्ण उपयोग करता है। पर्ल रन चरण में संकलन में भी देरी करेगा। वे शब्द जो उस प्रकार के प्रसंस्करण को इंगित करते हैं जो वास्तव में किसी भी समय हो रहा है, जो संकलन समय और रन टाइम हैं। संकलन चरण के समय अधिकांश बिंदुओं पर पर्ल संकलन समय में है, लेकिन रन चरण के समय संकलन समय भी लिपिबद्ध किया जा सकता है। एक स्ट्रिंग तर्क में कोड के लिए संकलन समय पास किया गया <code>[[eval]]</code> बिल्ट-इन रन चरण के समय होता है। संकलन चरण के समय पर्ल प्रायः रन टाइम में होता है और अधिकांश रन चरण रन टाइम में खर्च करता है। संकलन चरण में कोड में <code>BEGIN</code> ब्लॉक रन टाइम पर निष्पादित होते हैं।<!-- NOTE TO EDITORS:  There is something missing in the preceding sentence -- for one thing, a comma before the conjunction.  The sentence might reasonably read 'Code in BEGIN blocks executes NOT at run time, but in the compile phase,' but is that what the author intended? -->संकलन समय पर, दुभाषिया पर्ल कोड को [[सार वाक्य रचना का पेड़|सार वाक्य रचना का ट्री]] में पार्स करता है। रनटाइम पर, यह [[ट्री ट्रैवर्सल]] द्वारा प्रोग्राम को निष्पादित करता है। पाठ को केवल एक बार पार्स किया जाता है, और सिंटैक्स ट्री निष्पादित होने से पहले अनुकूलन के अधीन होता है, ताकि निष्पादन अपेक्षाकृत कुशल हो। प्रारूप ट्री पर संकलन-समय के अनुकूलन में [[निरंतर तह]] और संदर्भ प्रसार सम्मलित है, लेकिन [[पीपहोल अनुकूलन]] भी किया जाता है।<ref>{{Cite web|title=पर्लगट्स - पर्ल एपीआई का परिचय - पर्लडॉक ब्राउज़र|url=https://perldoc.perl.org/perlguts#Compile-pass-3:-peephole-optimization|access-date=2022-01-24|website=perldoc.perl.org}}</ref>
पर्ल में एक [[ट्यूरिंग-पूर्ण]] [[औपचारिक व्याकरण]] है क्योंकि संकलन चरण के समय निष्पादित रन-टाइम कोड से पार्सिंग प्रभावित हो सकती है।<ref>{{cite web |last = Schwartz |first = Randal |author-link = Randal L. Schwartz |title = पार्सिंग पर्ल पर|url = http://www.perlmonks.org/index.pl?node_id=44722 |access-date = 2007-01-03 |archive-date = September 27, 2007 |archive-url = https://web.archive.org/web/20070927000827/http://www.perlmonks.org/index.pl?node_id=44722 |url-status = live }}</ref> इसलिए, पर्ल को सीधे [[लेक्स प्रोग्रामिंग टूल]]/वाईएसीसी लेक्सिकल विश्लेषण/[[पार्सर]] संयोजन द्वारा पार्स नहीं किया जा सकता है। इसके अतिरिक्त, दुभाषिया अपने स्वयं के लेक्सर को लागू करता है, जो भाषा में अस्पष्टताओं को हल करने के लिए एक संशोधित [[जीएनयू बाइसन]] पार्सर के साथ समन्वय करता है।{{cn|date=December 2020}} यह प्रायः कहा जाता है कि केवल पर्ल ही पर्ल को पार्स कर सकता है,<ref>{{cite web |url = ftp://ftp.ora.com/pub/labs/tpj/tpj2.pdf |title = पर्ल जर्नल #19/9.26|access-date = 2011-02-04 |publisher = [[O'Reilly Media]] }}</ref> जिसका अर्थ है कि केवल पर्ल दुभाषिया (<code>perl</code>) पर्ल भाषा (पर्ल) को पार्स कर सकता है, लेकिन सामान्य रूप से यह भी सच नहीं है। क्योंकि पर्ल दुभाषिया अपने संकलन चरण के समय एक ट्यूरिंग मशीन का अनुकरण कर सकता है, इसे प्रत्येक विषय में पार्सिंग को पूरा करने के लिए हॉल्टिंग समस्या को तय करने की आवश्यकता होगी। यह एक दीर्घकालिक परिणाम है कि हॉल्टिंग समस्या अनिर्णीत है, और इसलिए पर्ल भी हमेशा पर्ल को पार्स नहीं कर सकता है। पर्ल अपने स्वयं के संकलन चरण में उपयोगकर्ता को अपनी पूर्ण प्रोग्रामिंग शक्ति तक पहुंच प्रदान करने का असामान्य विकल्प बनाता है। सैद्धांतिक शुद्धता की स्थिति में लागत अधिक है, लेकिन व्यावहारिक असुविधा दुर्लभ प्रतीत होती है।<ref>{{cite web
पर्ल में एक [[ट्यूरिंग-पूर्ण]] [[औपचारिक व्याकरण]] है क्योंकि संकलन चरण के समय निष्पादित रन-टाइम कोड से पार्सिंग प्रभावित हो सकती है।<ref>{{cite web |last = Schwartz |first = Randal |author-link = Randal L. Schwartz |title = पार्सिंग पर्ल पर|url = http://www.perlmonks.org/index.pl?node_id=44722 |access-date = 2007-01-03 |archive-date = September 27, 2007 |archive-url = https://web.archive.org/web/20070927000827/http://www.perlmonks.org/index.pl?node_id=44722 |url-status = live }}</ref> इसलिए, पर्ल को सीधे [[लेक्स प्रोग्रामिंग टूल]]/वाईएसीसी लेक्सिकल विश्लेषण/[[पार्सर]] संयोजन द्वारा पार्स नहीं किया जा सकता है। इसके अतिरिक्त, दुभाषिया अपने स्वयं के लेक्सर को लागू करता है, जो भाषा में अस्पष्टताओं को हल करने के लिए एक संशोधित [[जीएनयू बाइसन]] पार्सर के साथ समन्वय करता है।{{cn|date=December 2020}} यह प्रायः कहा जाता है कि केवल पर्ल ही पर्ल को पार्स कर सकता है,<ref>{{cite web |url = ftp://ftp.ora.com/pub/labs/tpj/tpj2.pdf |title = पर्ल जर्नल #19/9.26|access-date = 2011-02-04 |publisher = [[O'Reilly Media]] }}</ref> जिसका अर्थ है कि केवल पर्ल दुभाषिया (<code>perl</code>) पर्ल भाषा (पर्ल) को पार्स कर सकता है, लेकिन सामान्य रूप से यह भी सच नहीं है। क्योंकि पर्ल दुभाषिया अपने संकलन चरण के समय एक ट्यूरिंग मशीन का अनुकरण कर सकता है, इसे प्रत्येक विषय में पार्सिंग को पूरा करने के लिए हॉल्टिंग समस्या को तय करने की आवश्यकता होगी। यह एक दीर्घकालिक परिणाम है कि हॉल्टिंग समस्या अनिर्णीत है, और इसलिए पर्ल भी हमेशा पर्ल को पार्स नहीं कर सकता है। पर्ल अपने स्वयं के संकलन चरण में उपयोगकर्ता को अपनी पूर्ण प्रोग्रामिंग शक्ति तक पहुंच प्रदान करने का असामान्य विकल्प बनाता है। सैद्धांतिक शुद्धता की स्थिति में लागत अधिक है, लेकिन व्यावहारिक असुविधा दुर्लभ प्रतीत होती है।<ref>{{cite web
  |url=http://blogs.perl.org/users/jeffrey_kegler/2011/10/perl-and-parsing-11-are-all-perl-programs-parseable.html
  |url=http://blogs.perl.org/users/jeffrey_kegler/2011/10/perl-and-parsing-11-are-all-perl-programs-parseable.html
  |title=पर्ल और पार्सिंग 11: क्या सभी पर्ल प्रोग्राम पार्स करने योग्य हैं?|last=Kegler |first=Jeffrey  |date=October 7, 2011 |access-date=October 25, 2022
  |title=पर्ल और पार्सिंग 11: क्या सभी पर्ल प्रोग्राम पार्स करने योग्य हैं?|last=Kegler |first=Jeffrey  |date=October 7, 2011 |access-date=October 25, 2022
  |quote=... ऐसा लगता है कि हम बिल्कुल कुछ नहीं छोड़ रहे हैं। कोई भी कभी भी व्यवहारिक कमी नहीं दिखा पाया है}}</ref> पर्ल को पार्स करने वाले अन्य प्रोग्राम, जैसे [[स्थैतिक कार्यक्रम विश्लेषण]] सोर्स-कोड एनालाइजर और [[इंडेंट स्टाइल]] ऑटो-इंडेंटर्स, को न केवल अस्पष्ट [[भाषा निर्माण]] के साथ बल्कि सामान्य विषय में पर्ल पार्सिंग की [[पुनरावर्ती भाषा]] के साथ भी संघर्ष करना पड़ता है। एडम केनेडी (प्रोग्रामर) की पीपीआई परियोजना ने निष्पादन योग्य कोड के रूप में पर्ल को पार्स करने के अतिरिक्त एक दस्तावेज़ के रूप में पर्ल कोड को पार्स करने पर ध्यान केंद्रित किया (दस्तावेज़ के रूप में इसकी अखंडता बनाए रखना)। यह केनेडी ही थे जिन्होंने पहली बार अनुमान लगाया था कि पार्सिंग पर्ल 'हॉल्टिंग प्रॉब्लम' से पीड़ित है,<ref>{{cite web |url = https://metacpan.org/module/PPI |title = PPI—पर्ल को पार्स करें, विश्लेषण करें और मैनिप्युलेट करें (पर्ल के बिना)|author = Kennedy, Adam |year = 2006 |publisher = [[CPAN]] |access-date = September 16, 2013 |archive-date = September 3, 2013 |archive-url = https://web.archive.org/web/20130903091241/https://metacpan.org/module/PPI |url-status = live }}</ref> जो बाद में सिद्ध हुआ।<ref>{{cite journal |title = चावल की प्रमेय|journal = The Perl Review |volume = 4 |issue = 3 |pages = 23–29 |date = Summer 2008 }} and {{cite journal |title = Perl is Undecidable |journal = The Perl Review |volume = 5 |pages = 7–11 |date = Fall 2008 }}, available online at {{cite web |url = http://www.jeffreykegler.com/Home/perl-and-undecidability |title = Perl and Undecidability |author = Kegler, Jeffrey |access-date = January 4, 2009 |archive-date = August 17, 2009 |archive-url = https://web.archive.org/web/20090817183115/http://www.jeffreykegler.com/Home/perl-and-undecidability |url-status = live }}</ref> पर्ल को कोर पर्ल भाषा के लिए 250,000 से अधिक कार्यात्मक परीक्षण और कोर मॉड्यूल के लिए 250,000 से अधिक कार्यात्मक परीक्षण के साथ वितरित किया गया है। ये सामान्य निर्माण प्रक्रिया के भाग के रूप में चलते हैं और व्यापक रूप से दुभाषिया और इसके मूल मॉड्यूल का प्रयोग करते हैं। पर्ल डेवलपर्स यह सुनिश्चित करने के लिए कार्यात्मक परीक्षणों पर भरोसा करते हैं कि दुभाषिया में परिवर्तन [[सॉफ्टवेयर बग]] प्रदर्शित नहीं करते हैं; इसके अतिरिक्त, पर्ल उपयोगकर्ता जो देखते हैं कि दुभाषिया उनके सिस्टम पर अपने कार्यात्मक परीक्षणों को पास करता है, उनमें उच्च स्तर का विश्वास हो सकता है कि यह ठीक से काम कर रहा है।{{cn|date=December 2020}}
  |quote=... ऐसा लगता है कि हम बिल्कुल कुछ नहीं छोड़ रहे हैं। कोई भी कभी भी व्यवहारिक कमी नहीं दिखा पाया है}}</ref> पर्ल को पार्स करने वाले अन्य प्रोग्राम, जैसे [[स्थैतिक कार्यक्रम विश्लेषण]] सोर्स-कोड एनालाइजर और [[इंडेंट स्टाइल]] ऑटो-इंडेंटर्स, को न केवल अस्पष्ट [[भाषा निर्माण]] के साथ बल्कि सामान्य विषय में पर्ल पार्सिंग की [[पुनरावर्ती भाषा]] के साथ भी संघर्ष करना पड़ता है। एडम केनेडी (प्रोग्रामर) की पीपीआई परियोजना ने निष्पादन योग्य कोड के रूप में पर्ल को पार्स करने के अतिरिक्त एक दस्तावेज़ के रूप में पर्ल कोड को पार्स करने पर ध्यान केंद्रित किया (दस्तावेज़ के रूप में इसकी अखंडता बनाए रखना)। यह केनेडी ही थे जिन्होंने पहली बार अनुमान लगाया था कि पार्सिंग पर्ल 'हॉल्टिंग प्रॉब्लम' से पीड़ित है,<ref>{{cite web |url = https://metacpan.org/module/PPI |title = PPI—पर्ल को पार्स करें, विश्लेषण करें और मैनिप्युलेट करें (पर्ल के बिना)|author = Kennedy, Adam |year = 2006 |publisher = [[CPAN]] |access-date = September 16, 2013 |archive-date = September 3, 2013 |archive-url = https://web.archive.org/web/20130903091241/https://metacpan.org/module/PPI |url-status = live }}</ref> जो बाद में सिद्ध हुआ।<ref>{{cite journal |title = चावल की प्रमेय|journal = The Perl Review |volume = 4 |issue = 3 |pages = 23–29 |date = Summer 2008 }} and {{cite journal |title = Perl is Undecidable |journal = The Perl Review |volume = 5 |pages = 7–11 |date = Fall 2008 }}, available online at {{cite web |url = http://www.jeffreykegler.com/Home/perl-and-undecidability |title = Perl and Undecidability |author = Kegler, Jeffrey |access-date = January 4, 2009 |archive-date = August 17, 2009 |archive-url = https://web.archive.org/web/20090817183115/http://www.jeffreykegler.com/Home/perl-and-undecidability |url-status = live }}</ref> पर्ल को कोर पर्ल भाषा के लिए 250,000 से अधिक कार्यात्मक परीक्षण और कोर मॉड्यूल के लिए 250,000 से अधिक कार्यात्मक परीक्षण के साथ वितरित किया गया है। ये सामान्य निर्माण प्रक्रिया के भाग के रूप में चलते हैं और व्यापक रूप से दुभाषिया और इसके मूल मॉड्यूल का प्रयोग करते हैं। पर्ल डेवलपर्स यह सुनिश्चित करने के लिए कार्यात्मक परीक्षणों पर भरोसा करते हैं कि दुभाषिया में परिवर्तन [[सॉफ्टवेयर बग]] प्रदर्शित नहीं करते हैं; इसके अतिरिक्त, पर्ल उपयोगकर्ता जो देखते हैं कि दुभाषिया उनके सिस्टम पर अपने कार्यात्मक परीक्षणों को पास करता है, उनमें उच्च स्तर का विश्वास हो सकता है कि यह ठीक से काम कर रहा है।{{cn|date=December 2020}}





Revision as of 20:56, 9 January 2023

पर्ल
File:Perl language logo.svg
ParadigmMulti-paradigm: functional, imperative, object-oriented (class-based), reflective
द्वारा डिज़ाइन किया गयाLarry Wall
DeveloperLarry Wall
पहली प्रस्तुतिDecember 18, 1987; 38 years ago (1987-12-18)[1]
Stable release
  • 5.36.0[2] / 28 May 2022; 4 years ago (2022-05-28)
  • 5.34.1[3] / 13 March 2022; 4 years ago (2022-03-13)
Preview release
5.37.6[4] / 21 November 2022; 3 years ago (2022-11-21)
टाइपिंग अनुशासनDynamic
कार्यान्वयन भाषाC
ओएसCross-platform
लाइसेंसArtistic License 1.0[5][6] or GNU General Public License[7]
फ़ाइल नाम एक्सटेंशनएस.plx, .pl, .pm, .xs, .t, .pod, .cgi
वेबसाइटperl.org
Influenced by
AWK, BASIC, C, C++, Lisp, sed, Unix shell[8]
Influenced
CoffeeScript,[citation needed] Groovy,[citation needed] JavaScript, Julia, LPC, PHP, Python, Raku, Ruby, PowerShell

पर्ल दो उच्च-स्तरीय, सामान्य-उद्देश्य, व्याख्या की गई, गतिशील प्रोग्रामिंग भाषाओं का परिवार है। पर्ल 5 को संदर्भित करता है, लेकिन 2000 से 2019 तक इसने स्वयं पुन: डिज़ाइन की गई सह-भाषा, पर्ल 6 को भी संदर्भित किया, इससे पहले कि अक्टूबर 2019 में बाद के नाम को सामान्यतः राकू (प्रोग्रामिंग भाषा) में परिवर्तन कर दिया गया।[9][10]

चूंकि पर्ल का सामान्यतः संक्षिप्त रूप नहीं है,[11] प्रैक्टिकल डेटा निकालना और रिपोर्टिंग भाषा सहित कई प्रकार से संक्षिप्त नाम का उपयोग किया जा रहा है।[12] पर्ल को लैरी वॉल द्वारा 1987 में सामान्य-उद्देश्य वाली यूनिक्स स्क्रिप्टिंग भाषा के रूप में विकसित किया गया था, जिससे कि रिपोर्ट प्रसंस्करण को सरल बनाया जा सके।[13] तत्पश्चात, इसमें कई परिवर्तन और संशोधन हुए हैं। राकू, जो 2000 में पर्ल 5 के नए स्वरूप के रूप में प्रारभ्म हुआ, अंततः भिन्न भाषा में विकसित हुआ। दोनों भाषाएँ भिन्न-भिन्न विकास टीमों द्वारा स्वतंत्र रूप से विकसित की जा रही हैं और उदारतापूर्वक एक-दूसरे से विचार उधार लेती हैं।

पर्ल भाषाएँ C(प्रोग्रामिंग भाषा), यूनिक्स शेल, AWK (प्रोग्रामिंग भाषा), और sed सहित अन्य प्रोग्रामिंग भाषाओं से सुविधाएँ उधार लेती हैं;[1] वे यूनिक्स कमांड की कई समकालीन सूची की मनमानी डेटा-लंबाई सीमा के बिना टेक्स्ट प्रोसेसिंग सुविधाएं प्रदान करते हैं।[14] पर्ल 5 ने 1990 के दशक के अंत में अपनी शक्तिशाली नियमित अभिव्यक्ति और स्ट्रिंग पार्सिंग क्षमताओं के कारण कॉमन गेटवे इंटरफ़ेस भाषा के रूप में व्यापक लोकप्रियता प्राप्त की।[15][16][17][18]

सीजीआई के अतिरिक्त, पर्ल 5 का उपयोग कार्यकारी प्रबंधक, नेटवर्क प्रोग्रामिंग, वित्त, जैव सूचना विज्ञान और अन्य अनुप्रयोगों जैसे ग्राफिकल यूज़र इंटरफ़ेस के लिए किया जाता है। इसके कोमलता और शक्ति के कारण इसे स्क्रिप्टिंग भाषाओं की स्विस आर्मी चेनसॉ का उपनाम दिया गया है,[19] और यह भी कि कुछ अन्य भाषाओं की तुलना में अधिक विशेष वर्णों के उपयोग के कारण कुरूपता पर विचार करते हैं।[20] 1998 में, इसे डक्ट टेप के रूप में भी संदर्भित किया गया था जो इंटरनेट को साथ रखता है, ग्लू भाषा के रूप में इसके सर्वव्यापी उपयोग और इसकी कथित अयोग्यता दोनों के संदर्भ में होते है।[21]

पर्ल अत्यधिक अभिव्यंजक प्रोग्रामिंग भाषा है: किसी दिए गए एल्गोरिथ्म के लिए स्रोत कोड लघु और अत्यधिक संकुचित हो सकता है।[22][23]


नाम

पर्ल को मूल रूप से "पर्ल" नाम दिया गया था। वॉल सकारात्मक अर्थों के साथ भाषा को लघु नाम देना चाहते थे। वॉल ने पर्ल के आधिकारिक प्रदर्शन से पहले वर्तमान समय में पर्ल प्रोग्रामिंग भाषा का शोध किया और नाम की वर्तनी में परिवर्तन कर दिया।[24]

पर्ल भाषा का वर्णन करते समय, नाम कैपिटलाइज़ होता है। प्रोग्राम का संदर्भ देते समय, नाम अनकैपिटलाइज्ड होता है क्योंकि अधिकांश यूनिक्स-जैसी फाइल सिस्टम केस-संवेदी होते हैं। प्रोग्रामिंग पर्ल के पहले संस्करण के प्रस्तावित होने से पहले, भाषा को पर्ल के रूप में संदर्भित करना सरल था। चूंकि, रैंडल एल. श्वार्ट्ज ने पुस्तक में भाषा के नाम को कैपिटलाइज़ किया जिससे टाइपसेट करते समय इसे अच्छे से प्रदर्शित किया जा सके। इस स्थिति के भेद को बाद में विहित के रूप में प्रलेखित किया गया था।[25]

नाम को कभी-कभी संक्षिप्त नाम के रूप में विस्तारित किया जाता है: प्रैक्टिकल एक्सट्रैक्शन तथा रिपोर्ट भाषा[26] और वॉल्स ओन पैथोलॉजिकली इक्लेक्टिक रबिश लिस्टर जो पर्ल के मैनुअल पेज में है।[27]


इतिहास

प्रारंभिक संस्करण

लैरी वॉल ने 1987 में पर्ल पर काम करना प्रारम्भ किया, जबकि यूनिसिस में 18 दिसंबर, 1987 को संस्करण 1.0 में प्रोग्रामर के रूप में काम कर रहे थे।[14][1]अगले कुछ वर्षों में भाषा का अधिक विस्तार हुआ।

1988 में प्रस्तावित हुई पर्ल 2 में अच्छा रेगुलर एक्सप्रेशन इंजन था। 1989 में प्रस्तावित पर्ल 3 ने बाइनरी डेटा स्ट्रीम के लिए समर्थन जोड़ा।[citation needed]

मूल रूप से, पर्ल के लिए दस्तावेज लंबा मैन पेज था। 1991 में, प्रोग्रामिंग पर्ल, जिसे कई पर्ल प्रोग्रामर अपने कवर के कारण कैमल बुक के रूप में जानते थे, प्रकाशित हुआ और भाषा के लिए वास्तविक संदर्भ बन गया। उसी समय, पर्ल संस्करण संख्या को 4 तक बढ़ा दिया गया था, भाषा में बड़े परिवर्तन को चिह्नित करने के लिए नहीं अन्यथा पुस्तक द्वारा अच्छी तरह से प्रलेखित संस्करण की पहचान करने के लिए था।[citation needed]


प्रारंभिक पर्ल 5

पर्ल 4 सुरक्षा प्रस्तावित की श्रृंखला के माध्यम से चला गया, 1993 में पर्ल 4.036 में समाप्त हुआ, जिसके बाद वॉल ने पर्ल 5 पर काम प्रारभ्म करने के लिए पर्ल 4 को छोड़ दिया। पर्ल 5 का प्रारंभिक डिजाइन 1994 में प्रस्तावित हुआ। पर्ल 5 पोर्टर्स मेलिंग लिस्ट की स्थापना मई 1994 में पर्ल 5 को भिन्न-भिन्न प्लेटफॉर्म पर पोर्ट करने के काम को समन्वित करने के लिए की गई थी।।[28]यह पर्ल 5 के विकास, सुरक्षा और पोर्टिंग के लिए प्राथमिक प्लेटफॉर्म बना हुआ है।

पर्ल 5.000 को 17 अक्टूबर 1994 को प्रस्तावित किया गया था।[29] यह दुभाषिया का लगभग पूर्ण पुनर्लेखन था, और इसने भाषा में कई नई सुविधाएँ जोड़ीं, जिनमें वस्तुएँ, संदर्भ, स्थानीय चर, शाब्दिक चर, और मॉड्यूलर सम्मलित हैं। महत्वपूर्ण रूप से, मॉड्यूल ने दुभाषिया को संशोधित किए बिना भाषा को विस्तारित करने के लिए तंत्र प्रदान किया। इसने कोर दुभाषिया को स्थिर करने की अनुमति दी, भले ही इसने साधारण पर्ल प्रोग्रामर को नई भाषा सुविधाओं को जोड़ने में सक्षम बनाया। पर्ल 5 सक्रिय विकास में है।

पर्ल 5.001 को 13 मार्च, 1995 को प्रस्तावित किया गया था। पर्ल 5.002 को 29 फरवरी, 1996 को नए प्रोटोटाइप विशेषता के साथ प्रस्तावित किया गया था। इसने मॉड्यूल लेखकों को उप-दिनचर्या बनाने की अनुमति दी। पर्ल 5.003 को सुरक्षा प्रस्तावित के रूप में 25 जून 1996 को प्रस्तावित किया गया था।[30]

पर्ल 5 इतिहास की सबसे महत्वपूर्ण घटनाओं में से भाषा के बाहर घटित हुई और यह इसके मॉड्यूल समर्थन का परिणाम था। 26 अक्टूबर 1995 को, व्यापक पर्ल आर्काइव नेटवर्क (सीपीएएन) को पर्ल भाषा और पर्ल मॉड्यूल के लिए सॉफ्टवेयर रिपॉजिटरी के रूप में स्थापित किया गया था, दिसंबर 2022 तक, इसके 43,865 वितरणों में 211,850 से अधिक मॉड्यूल हैं, जो 14,324 से अधिक लेखकों द्वारा लिखे गए हैं, और दुनिया भर में 245 से अधिक स्थानों पर दिखाई देते हैं।[31]

पर्ल 5.004 को 15 मई, 1997 को प्रस्तावित किया गया था, और इसमें अन्य बातों के अतिरिक्त, यूनिवर्सल पैकेज सम्मिलित था, जिसमें पर्ल को आधार वस्तु दी गई थी जिससे सभी वर्ग (कंप्यूटर प्रोग्रामिंग) स्वचालित रूप से प्राप्त हुए थे और मॉड्यूल के संस्करणों की आवश्यकता थी। अन्य महत्वपूर्ण विकास CGI.pm मॉड्यूल का समावेश था,[32] जिसने कॉमन गेटवे इंटरफेस के रूप में पर्ल की लोकप्रियता में योगदान दिया।[33]

पर्ल 5.004 ने माइक्रोसॉफ़्ट विंडोज़, प्लान 9, क्यूएनएक्स, और एमिगाओएस(AmigaOS) के लिए समर्थन जोड़ा।[32]

पर्ल 5.005 को 22 जुलाई 1998 को प्रस्तावित किया गया था। इस प्रस्तावित में रेगेक्स इंजन में कई संवर्द्धन, B::* मॉड्यूल के माध्यम से बैकएंड में नए हुक, qr// रेगेक्स उद्धरण ऑपरेटर, अन्य नए कोर मॉड्यूल का बड़ा चयन, और कई और ऑपरेटिंग सिस