Perl language structure
पर्ल प्रोग्रामिंग भाषा की संरचना में भाषा के वाक्य रचना संबंधी नियम और कार्यक्रमों को व्यवस्थित करने के सामान्य तरीके दोनों शामिल हैं। पर्ल के डिजाइन दर्शन को आम तौर पर उद्धृत आदर्श वाक्य "इसे करने के एक से अधिक तरीके हैं" में व्यक्त किया गया है। एक बहु-प्रतिमान, गतिशील रूप से टाइप की गई भाषा के रूप में, पर्ल प्रोग्राम डिजाइन में बहुत अधिक लचीलेपन की अनुमति देता है। पर्ल मॉड्यूलराइजेशन को भी प्रोत्साहित करता है; इसका श्रेय इसकी यूनिक्स जड़ों की घटक-आधारित डिजाइन संरचना को दिया जाता है, और यह सी. पी. ए. एन. संग्रह के आकार के लिए जिम्मेदार है, जो 100,000 से अधिक मॉड्यूल का एक समुदाय-अनुरक्षित भंडार है। पर्ल में, न्यूनतम हैलो वर्ल्ड प्रोग्राम को निम्नानुसार लिखा जा सकता हैः "हैलो, वर्ल्ड! \n" प्रिंट करें यह स्ट्रिंग हैलो, वर्ल्ड प्रिंट करता है। और एक नई रेखा, प्रतीकात्मक रूप से एक एन चरित्र द्वारा व्यक्त की जाती है जिसकी व्याख्या पूर्ववर्ती पलायन चरित्र (एक बैकस्लैश) द्वारा बदल दी जाती है। संस्करण 5.10 के बाद से, नया 'से' बिल्टइन और भी अधिक सरलता से वही प्रभाव पैदा करता हैः "हैलो, वर्ल्ड!" कहें। एक पूरे पर्ल प्रोग्राम को पर्ल के लिए एक कमांड-लाइन पैरामीटर के रूप में भी निर्दिष्ट किया जा सकता है, इसलिए उसी प्रोग्राम को कमांड लाइन से भी निष्पादित किया जा सकता है (उदाहरण के लिए यूनिक्स के लिए दिखाया गया है): $perl-e 'प्रिंट' हैलो, वर्ल्ड! \n 'प्रोग्राम का विहित रूप थोड़ा अधिक वर्बोस हैः #!/usr/बिन/पर्ल प्रिंट' हैलो, वर्ल्ड! \n '; हैश मार्क वर्ण पर्ल में एक टिप्पणी का परिचय देता है, जो कोड की पंक्ति के अंत तक चलता है और संकलक द्वारा (विंडोज को छोड़कर) नजरअंदाज कर दिया जाता है। यहाँ इस्तेमाल की गई टिप्पणी एक विशेष प्रकार की हैः इसे शेबांग रेखा कहा जाता है। यह यूनिक्स जैसे ऑपरेटिंग सिस्टम को पर्ल दुभाषिया खोजने के लिए कहता है, जिससे पर्ल का स्पष्ट रूप से उल्लेख किए बिना प्रोग्राम को लागू करना संभव हो जाता है। (ध्यान दें कि, माइक्रोसॉफ्ट विंडोज सिस्टम पर, पर्ल कार्यक्रमों को आम तौर पर. pl विस्तार को पर्ल दुभाषिया के साथ जोड़कर लागू किया जाता है। ऐसी परिस्थितियों से निपटने के लिए, पर्ल शेबांग रेखा का पता लगाता है और इसे स्विच के लिए पार्स करता है।) विहित रूप में दूसरी पंक्ति में एक अर्धविराम शामिल है, जिसका उपयोग पर्ल में बयानों को अलग करने के लिए किया जाता है। ब्लॉक या फ़ाइल में केवल एक कथन के साथ, एक विभाजक अनावश्यक है, इसलिए इसे प्रोग्राम के न्यूनतम रूप से या आम तौर पर किसी भी ब्लॉक या फ़ाइल में अंतिम कथन से हटाया जा सकता है। विहित रूप में यह शामिल है, क्योंकि हर कथन को समाप्त करना आम बात है, भले ही ऐसा करना अनावश्यक हो, क्योंकि इससे संपादन आसान हो जाता हैः कोड को अर्धविराम को समायोजित किए बिना ब्लॉक या फ़ाइल के अंत में जोड़ा जा सकता है, या उससे दूर ले जाया जा सकता है। पर्ल के संस्करण 5.10 में एक ऐसा फ़ंक्शन प्रस्तुत किया गया है जो अपने आउटपुट में एक नई पंक्ति के वर्ण को निहित रूप से जोड़ता है, जिससे न्यूनतम "हैलो वर्ल्ड" प्रोग्राम और भी छोटा हो जाता हैः नए 5.10 कार्यों को आयात करने के लिए 5.010 का उपयोग करें; #मौजूद होना चाहिए, ध्यान दें कि यह 5.010 है न कि 5.10 कहें 'हैलो, वर्ल्ड!' डेटा प्रकार पर्ल में कई मौलिक डेटा प्रकार हैं। सबसे अधिक उपयोग किए जाने वाले और चर्चा किए जाने वाले स्केलर, ऐरे, हैश, फाइलहैंडल और सबरूटीन हैंः स्केलर मान स्ट्रिंग मान (शाब्दिक) को उद्धरणों द्वारा संलग्न किया जाना चाहिए। दोहरे उद्धरणों में एक स्ट्रिंग को बंद करने से चर के मूल्यों की अनुमति मिलती है जिनके नाम स्ट्रिंग में दिखाई देते हैं जो स्वचालित रूप से स्ट्रिंग में चर नाम (या प्रक्षेपित किए जाने) को प्रतिस्थापित करते हैं। एकल उद्धरणों में एक स्ट्रिंग को बंद करने से परिवर्तनीय अंतर्वेशन को रोका जा सकता है। उदाहरण के लिए, यदि $नाम "जिम" हैः तो प्रिंट ("मेरा नाम $नाम है") "मेरा नाम जिम है" (दोहरे उद्धरणों के भीतर अंतर्वेशन) प्रिंट करेगा, लेकिन प्रिंट ('मेरा नाम $नाम है') "मेरा नाम $नाम है" प्रिंट करेगा (एकल उद्धरणों के भीतर कोई अंतर्वेशन नहीं)। एक स्ट्रिंग में दोहरे उद्धरण चिह्न को शामिल करने के लिए, एक बैकस्लैश के साथ उससे पहले या एकल उद्धरण में स्ट्रिंग को संलग्न करें। एकल उद्धरण चिह्न को शामिल करने के लिए, उससे पहले एक बैकस्लैश के साथ या दोहरे उद्धरणों में स्ट्रिंग को संलग्न करें। स्ट्रिंग्स को q और qq उद्धरण जैसे ऑपरेटरों के साथ भी उद्धृत किया जा सकता हैः 'यह' और q (यह) समान हैं, '$यह' और qq ($यह) समान हैं। अंत में, मल्टीलाइन स्ट्रिंग्स को यहाँ दस्तावेज़ों का उपयोग करके परिभाषित किया जा सकता हैः $मल्टीलाइन _ स्ट्रिंग = <<EOF; यह मेरा मल्टीलाइन स्ट्रिंग नोट है कि मैं इसे "EOF" शब्द के साथ समाप्त कर रहा हूँ। ई. ओ. एफ. संख्या (संख्यात्मक स्थिरांक) को उद्धरण की आवश्यकता नहीं होती है। पर्ल संख्याओं को स्ट्रिंग्स में परिवर्तित करेगा और इसके विपरीत उस संदर्भ के आधार पर जिसमें उनका उपयोग किया जाता है। जब तारों को संख्याओं में परिवर्तित किया जाता है, तो तारों के पीछे के गैर-संख्यात्मक भागों को छोड़ दिया जाता है। यदि स्ट्रिंग का कोई प्रमुख भाग संख्यात्मक नहीं है, तो स्ट्रिंग को संख्या 0 में परिवर्तित कर दिया जाएगा। निम्नलिखित उदाहरण में, स्ट्रिंग्स $n और $m को संख्याओं के रूप में माना जाता है। यह कोड संख्या '5' छापता है। चरों के मान समान रहते हैं। ध्यान दें कि पर्ल में, + हमेशा संख्यात्मक जोड़ प्रचालक होता है। स्ट्रिंग संयोजन प्रचालक अवधि है। $n = '3 सेब'; $m = '2 संतरे'; प्रिंट $n + $m; अपूर्णांक मानों को पूर्णांक मानों में गोल करने के लिए कार्य प्रदान किए जाते हैंः पूर्णांक आंशिक भाग को काटता है, शून्य की ओर गोल करता है; पोसिक्सःः छत और पोसिक्सःः फर्श गोल हमेशा ऊपर और हमेशा नीचे, क्रमशः। प्रिंटएफ "% एफ" या स्प्रिंटएफ "% एफ" का नंबर-टू-स्ट्रिंग रूपांतरण, बैंकरों के राउंडिंग का उपयोग करता है। पर्ल का एक बूलियन संदर्भ भी है जिसका उपयोग यह सशर्त कथनों के मूल्यांकन में करता है। निम्नलिखित मान सभी पर्ल में गलत के रूप में मूल्यांकन करते हैंः $फाल्स = 0; #संख्या शून्य $फाल्स = 0.0; #एक फ्लोट के रूप में संख्या शून्य $फाल्स = 0b0; #द्विआधारी में संख्या शून्य = 0x0; #हेक्साडेसिमल में संख्या शून्य $फाल्स = '0'; #स्ट्रिंग शून्य $फाल्स = "; #खाली स्ट्रिंग $फाल्स = (); #खाली सूची $फाल्स = अनडेफ; #अनडेफ $फाल्स = 2-3+1 #से वापसी मूल्य जो" 0 "में परिवर्तित हो जाता है, इसलिए यह गलत है। इसमें "0 लेकिन सत्य" की विषम स्व-वर्णित शाब्दिक स्ट्रिंग शामिल है, जो वास्तव में एक संख्या के रूप में 0 है, लेकिन जब बूलियन के रूप में उपयोग किया जाता है तो सत्य है। सभी गैर-संख्यात्मक स्ट्रिंग्स में भी यह गुण होता है, लेकिन इस विशेष स्ट्रिंग को बिना किसी संख्यात्मक चेतावनी के पर्ल द्वारा काट दिया जाता है। इस स्ट्रिंग का एक कम स्पष्ट लेकिन अधिक वैचारिक रूप से पोर्टेबल संस्करण '0E0' या '0e0' है, जो 0 के रूप में मूल्यांकन किए जाने वाले वर्णों पर निर्भर नहीं करता है, क्योंकि '0E0' शाब्दिक रूप से शून्य गुना दस घात शून्य है। खाली हैश {} भी सही है; इस संदर्भ में {} एक खाली ब्लॉक नहीं है, क्योंकि पर्ल-ई 'प्रिंट रेफ {}' हैश बताता है। मूल्यांकित बूलियन अभिव्यक्तियाँ भी स्केलर मान हैं। प्रलेखन इस बात का वादा नहीं करता है कि सही या गलत का कौन सा विशेष मूल्य वापस किया जाएगा। कई बूलियन प्रचालक सही के लिए 1 और गलत के लिए खाली स्ट्रिंग लौटाते हैं। परिभाषित () फलन यह निर्धारित करता है कि किसी चर का कोई मान सेट है या नहीं। उपरोक्त उदाहरणों में, परिभाषित ($false) undef को छोड़कर प्रत्येक मूल्य के लिए सही है। यदि 1 या 0 में से किसी एक की विशेष रूप से आवश्यकता है, तो सशर्त प्रचालक का उपयोग करके एक स्पष्ट रूपांतरण किया जा सकता हैः मेरा $वास्तविक _ परिणाम = $बूलियन _ परिणाम? 1: 0; सरणी मान एक सरणी मान (या सूची) को इसके तत्वों को सूचीबद्ध करके निर्दिष्ट किया जाता है, जो अल्पविराम द्वारा अलग किया जाता है, कोष्ठक द्वारा संलग्न होता है (कम से कम जहां प्रचालक वरीयता द्वारा आवश्यक होता है)। @scores = (32,45,16,5); qw () उद्धरण-जैसा प्रचालक उद्धरण और अल्पविराम टाइप किए बिना स्ट्रिंग की सूची की परिभाषा की अनुमति देता है। कोष्ठक के बजाय लगभग किसी भी परिसीमन का उपयोग किया जा सकता है। निम्नलिखित पंक्तियाँ समतुल्य हैंः @names = ('बिली', 'जो', 'जिम-बॉब'); @names = qw (बिली जो जिम-बॉब); स्प्लिट फ़ंक्शन स्ट्रिंग की एक सूची देता है, जो एक परिसीमन स्ट्रिंग या नियमित अभिव्यक्ति का उपयोग करके स्ट्रिंग अभिव्यक्ति से विभाजित होते हैं। @scores = विभाजित (',', '32,45,16,5'); एक सूची के व्यक्तिगत तत्वों को वर्ग कोष्ठक में एक संख्यात्मक सूचकांक प्रदान करके एक्सेस किया जाता है। स्केलर सिगिल का उपयोग किया जाना चाहिए। उपसूची (सरणी टुकड़े) को कोष्ठक में संख्यात्मक सूचकांकों की एक सीमा या सूची का उपयोग करके भी निर्दिष्ट किया जा सकता है। इस मामले में सरणी सिगिल का उपयोग किया जाता है। उदाहरण के लिए, $माह [3] "अप्रैल" है (एक सरणी में पहले तत्व का सूचकांक मूल्य 0 है), और @month [4.6] ("मई", "जून", "जुलाई") है। हैश मान पर्ल प्रोग्रामर कुंजी/मूल्य जोड़े की सूची से हैश (या सहयोगी सरणी) को आरंभ कर सकते हैं। यदि कुंजियों को अल्पविराम के बजाय => प्रचालक (कभी-कभी वसा अल्पविराम कहा जाता है) के साथ मानों से अलग किया जाता है, तो वे उद्धृत नहीं किए जा सकते हैं। निम्नलिखित पंक्तियाँ समतुल्य हैंः% पसंदीदा = ('जो', 'लाल', 'सैम', 'नीला');% पसंदीदा = (जो => 'लाल', सैम => 'नीला'); एक हैश में व्यक्तिगत मानों को घुंघराले ब्रेसिज़ में संबंधित कुंजी प्रदान करके एक्सेस किया जाता है। $सिगिल अभिगम्य तत्व को एक स्केलर के रूप में पहचानता है। उदाहरण के लिए, $फेवरेट {जो} 'लाल' के बराबर होता है। एक हैश को व्यक्तिगत रूप से इसके मान निर्धारित करके भी आरंभ किया जा सकता हैः $पसंदीदा {जो} = 'लाल'; $पसंदीदा {सैम} = 'नीला'; $पसंदीदा {ऑस्कर} = 'हरा'; इसके बजाय @सिगिल का उपयोग करके कई तत्वों तक पहुँचा जा सकता है (परिणाम को एक सूची के रूप में पहचानना)। उदाहरण के लिए, @favorite {'जो', 'सैम'} बराबर है ('लाल', 'नीला')। फाइलहैंडल फाइलहैंडल संसाधनों को पढ़ने और लिखने की सुविधा प्रदान करता है। ये अक्सर डिस्क पर फाइलें होती हैं, लेकिन एक उपकरण, एक पाइप या यहां तक कि एक स्केलर मूल्य भी हो सकती हैं। मूल रूप से, फ़ाइल हैंडल्स को केवल पैकेज चर के साथ बनाया जा सकता था, इसे अन्य चर से अलग करने के लिए ALL _ CAPS परंपरा का उपयोग किया जा सकता था। पर्ल 5.6 और नया भी एक स्केलर चर को स्वीकार करते हैं, जिसे एक नामित फाइलहैंडल के स्थान पर एक अनाम फाइलहैंडल के संदर्भ में सेट (स्वतः सक्रिय) किया जाएगा। टाइपग्लोब मान एक टाइपग्लोब मान एक प्रतीक तालिका प्रविष्टि है। टाइपग्लोब्स का मुख्य उपयोग प्रतीक तालिका उपनाम बनाना है। उदाहरण के लिएः * पी. आई. =\3.141592653; #निरंतर स्केलर बनाना $पी. आई. * यह = * कि; #सभी डेटा प्रकारों के लिए उपनाम बनाना 'यह' सभी डेटा प्रकारों के लिए 'कि' सरणी कार्य एक सरणी में तत्वों की संख्या को या तो स्केलर संदर्भ में सरणी का मूल्यांकन करके या $#सिगिल की मदद से निर्धारित किया जा सकता है। उत्तरार्द्ध सरणी में अंतिम तत्व का सूचकांक देता है, न कि तत्वों की संख्या। अभिव्यक्ति स्केलर (@array) और ($#array + 1) समतुल्य हैं। हैश कार्य कुछ कार्य हैं जो पूरे हैश पर काम करते हैं। कुंजी कार्य एक हैश लेता है और अपनी कुंजी की सूची देता है। इसी तरह, मान फलन एक हैश के मान देता है। ध्यान दें कि कुंजी और मान एक सुसंगत लेकिन मनमाने क्रम में वापस किए जाते हैं। #प्रत्येक कॉल अगली कुंजी/मूल्य जोड़ी लौटाता है। #सभी मान अंततः वापस कर दिए जाएंगे, लेकिन उनके क्रम #की भविष्यवाणी नहीं की जा सकती है। जबकि (($नाम, $पता) = प्रत्येक% पता पुस्तिका) {प्रिंट "$नाम $पते पर रहता है";} #उपरोक्त के समान, लेकिन वर्णानुक्रम में क्रमबद्ध मेरे $अगले नाम (क्रमबद्ध कुंजी% पता पुस्तिका) {प्रिंट "$अगले नाम $पता पुस्तिका पर रहता है";} नियंत्रण संरचना पर्ल में कई प्रकार की नियंत्रण संरचनाएँ हैं। इसमें सी, जावास्क्रिप्ट और जावा प्रोग्रामिंग भाषाओं के समान ब्लॉक-उन्मुख नियंत्रण संरचनाएँ हैं। शर्तें कोष्ठकों से घिरी होती हैं, और नियंत्रित ब्लॉक ब्रेसिज़ से घिरे होते हैंः लेबल जबकि (कंड) {.} लेबल जबकि (कंड) {.} लेबल जारी रखें {.} लेबल के लिए (init-expr; कंड-expr; Incr-expr) {.} लेबल फोरैच वार (सूची) {.} लेबल फोरैच वार (सूची) {.} जारी रखें {.} यदि (कंड) {.} यदि (कंड) {.} अन्यथा {.} यदि (कंड) {.} एल्सिफ (कंड) {.} अन्यथा {.} जहां केवल एक कथन नियंत्रित किया जा रहा है, स्टेटमेंट मॉडिफायर्स अधिक सटीक वाक्य रचना प्रदान करते हैंः स्टेटमेंट यदि कंड; स्टेटमेंट जब तक कंड; स्टेटमेंट; स्टेटमेंट जब तक कंड; स्टेटमेंट; स्टेटमेंट। प्रवाह नियंत्रण मुख्य शब्द अगले (सी के जारी रहने के अनुरूप), अंतिम (सी के विराम के अनुरूप), वापसी और पुनः अभिव्यक्ति हैं, इसलिए उनका उपयोग शॉर्ट-सर्किट ऑपरेटरों के साथ किया जा सकता है। पर्ल में दो अंतर्निहित लूपिंग संरचनाएं भी होती हैं, जिनमें से प्रत्येक के दो रूप होते हैंः परिणाम = ग्रेप {.} सूची परिणाम = ग्रेप एक्सप्रे, सूची परिणाम = मैप {.} सूची परिणाम = मैप एक्सप्रे, सूची ग्रेप सूची के उन सभी तत्वों को बताती है जिनके लिए नियंत्रित ब्लॉक या अभिव्यक्ति का मूल्यांकन सही होता है। मानचित्र सूची के प्रत्येक तत्व के लिए नियंत्रित खंड या अभिव्यक्ति का मूल्यांकन करता है और परिणामी मूल्यों की एक सूची देता है। ये निर्माण एक सरल कार्यात्मक प्रोग्रामिंग शैली को सक्षम करते हैं। 5.10.0 रिलीज होने तक, पर्ल 5 में कोई स्विच स्टेटमेंट नहीं था। 5.10.0 के बाद से, एक बहु-तरफा शाखा कथन जिसे दिया गया/कब उपलब्ध है कहा जाता है, जो निम्नलिखित रूप लेता हैः v5.10 का उपयोग करें; #दिए गए नए 5.10 कार्यों को आयात करने के लिए मौजूद होना चाहिए (उदाहरण के लिए) {जब (कंड) {.} डिफ़ॉल्ट {.}} वाक्यात्मक रूप से, यह संरचना अन्य भाषाओं में पाए जाने वाले बयानों को बदलने के समान व्यवहार करती है, लेकिन कुछ महत्वपूर्ण अंतरों के साथ। सबसे बड़ा यह है कि स्विच/केस संरचनाओं के विपरीत, दिए गए/जब कथन स्पष्ट रूप से परिभाषित ब्रेक कमांड की प्रतीक्षा करने के बजाय पहली सफल शाखा के बाद निष्पादन को तोड़ते हैं। इसके विपरीत, स्विच व्यवहार का अनुकरण करने के लिए स्पष्ट निरंतरता आवश्यक है। पर्ल 5.10 का उपयोग नहीं करने वालों के लिए, पर्ल प्रलेखन अन्य नियंत्रण संरचनाओं का उपयोग करके समान प्रभाव प्राप्त करने के आधे दर्जन तरीकों का वर्णन करता है। एक स्विच मॉड्यूल भी है, जो बहन भाषा राकू के मॉडल पर कार्यक्षमता प्रदान करता है। इसे एक स्रोत फिल्टर का उपयोग करके लागू किया जाता है, इसलिए इसका उपयोग अनौपचारिक रूप से हतोत्साहित किया जाता है। पर्ल में गोटो लेबल स्टेटमेंट शामिल है, लेकिन इसका शायद ही कभी उपयोग किया जाता है। प्रवाह नियंत्रण विकल्पों की व्यापकता के कारण, ऐसी स्थितियाँ जहाँ अन्य भाषाओं में गोटो की आवश्यकता होती है, पर्ल में उतनी बार नहीं होती हैं। एक गोटो एंड सब स्टेटमेंट भी है जो एक टेल कॉल करता है। यह वर्तमान सबरूटीन को समाप्त कर देता है और तुरंत निर्दिष्ट सबरूटीन को कॉल करता है। इसका उपयोग उन स्थितियों में किया जाता है जहां एक कॉलर पर्ल की तुलना में अधिक कुशल स्टैक प्रबंधन कर सकता है (आमतौर पर क्योंकि वर्तमान स्टैक में कोई बदलाव की आवश्यकता नहीं है), और गहरी पुनरावृत्ति में, टेल कॉलिंग का प्रदर्शन पर पर्याप्त सकारात्मक प्रभाव पड़ सकता है, क्योंकि यह वापसी पर दायरे/स्टैक प्रबंधन के ओवरहेड से बचता है। सबरूटीन सबरूटीन को उप मुख्य शब्द के साथ परिभाषित किया जाता है और उन्हें केवल नाम देकर लागू किया जाता है। यदि विचाराधीन सबरूटीन को अभी तक घोषित नहीं किया गया है, तो आह्वान के लिए या तो कार्य नाम के बाद कोष्ठक या उससे पहले एक एम्परसेंड (&) की आवश्यकता होती है। लेकिन कोष्ठक का उपयोग और बिना कोष्ठक का उपयोग करना भी वर्तमान सबरूटीन के तर्कों को स्पष्ट रूप से कॉल किए गए तर्क पर पारित करेगा, और कोष्ठक का उपयोग और उपयोग प्रोटोटाइप को दरकिनार कर देगा। #सबरूटीन को कॉल करना #पेरेंथेसिस की आवश्यकता होती है यदि सबरूटीन को कोड में बाद में परिभाषित किया जाता है (); & फू; #(यह भी काम करता है, लेकिन सबरूटीन को दिए गए तर्कों के संबंध में अन्य परिणाम हैं) #सबरूटीन सबफू {.} फू को परिभाषित करना; #यहाँ कोष्ठकों की आवश्यकता नहीं है सबरूटीन नाम के बाद तर्कों की एक सूची प्रदान की जा सकती है। तर्क स्केलर, सूची या हैश हो सकते हैं। फ़ू $x, @y,% z; सबरूटीन के मापदंडों को किसी भी संख्या या प्रकार के रूप में घोषित करने की आवश्यकता नहीं है; वास्तव में, वे कॉल से कॉल में भिन्न हो सकते हैं। मापदंडों का कोई भी सत्यापन सबरूटीन के अंदर स्पष्ट रूप से किया जाना चाहिए। सरणी को उनके तत्वों तक विस्तारित किया जाता है; हैश को कुंजी/मूल्य जोड़े की सूची में विस्तारित किया जाता है; और पूरे लॉट को स्केलर की एक सपाट सूची के रूप में सबरूटीन में पारित किया जाता है। जो भी तर्क पारित किए जाते हैं वे विशेष सरणी @_ में सबरूटीन के लिए उपलब्ध होते हैं। @_ के तत्व वास्तविक तर्कों के संदर्भ हैं; @_ के एक तत्व को बदलने से संबंधित तर्क बदल जाता है। @_ के तत्वों को सामान्य तरीके से सदस्यता देकर एक्सेस किया जा सकता है। हालाँकि, परिणामी कोड को पढ़ना मुश्किल हो सकता है, और मापदंडों में पास-बाय-रेफरेंस शब्दार्थ होते हैं, जो अवांछनीय हो सकते हैं। एक आम मुहावरा नामित चर की सूची में @_ निर्दिष्ट करना है। मेरा ($x, $y, $z) = @_; यह निमोनिक पैरामीटर नाम प्रदान करता है और पास-बाय-वैल्यू शब्दार्थ को लागू करता है। मेरा मुख्य शब्द इंगित करता है कि निम्नलिखित चर शाब्दिक रूप से कंटेनमेंट ब्लॉक तक फैले हुए हैं। एक अन्य मुहावरा @_ के मापदंडों को बंद करना है। यह विशेष रूप से तब आम होता है जब सबरूटीन केवल एक तर्क लेता है या ऑब्जेक्ट-ओरिएंटेड मॉड्यूल में $सेल्फ तर्क को संभालने के लिए। मेरा $x = शिफ्ट; सबरूटीन नामित तर्कों का अनुकरण करने के लिए हैश को @_ असाइन कर सकते हैं; यह सबरूटीन के लिए पर्ल बेस्ट प्रैक्टिसेज में अनुशंसित है जिसमें कभी भी तीन से अधिक मापदंड होने की संभावना होती है। उप फलन1 {मेरा% आर्ग = @_; प्रिंट करें 'x' तर्क था '$आर्गस {x}' \n ';} फलन1 (x => 23); सबरूटिन मान वापस कर सकते हैं। रिटर्न 42, $x, @y,% z; यदि सबरूटीन रिटर्न स्टेटमेंट के माध्यम से बाहर नहीं निकलता है, तो यह सबरूटीन बॉडी के भीतर मूल्यांकन की गई अंतिम अभिव्यक्ति को लौटाता है। वापसी मूल्य में सरणी और हैश को स्केलर की सूचियों में विस्तारित किया जाता है, जैसे वे तर्क के लिए होते हैं। वापस की गई अभिव्यक्ति का मूल्यांकन सबरूटीन के कॉलिंग संदर्भ में किया जाता है; यह अनजान लोगों को आश्चर्यचकित कर सकता है। उप-सूची {(4,5,6)} उप सरणी {@x = (4,5,6); @x} $x = सूची; #बताता है 6-सूची का अंतिम तत्व $x = सरणी; #बताता है 3-सूची में तत्वों की संख्या @x = सूची; #बताता है (4,5,6) @x = सरणी; #बताता है (4,5,6) एक सबरूटीन वांछित सरणी कार्य के साथ अपने कॉलिंग संदर्भ की खोज कर सकता है। सब या तो {रिटर्न वांटेडएरे? (1,2): 'संतरे';} $x = या तो; #लौटाता है 'संतरे' @x = या तो; #लौटाता है (1,2) बेनामी कार्य नियमित अभिव्यक्तियाँ पर्ल भाषा में नियमित अभिव्यक्तियाँ (RE, या रेजेक्स) लिखने के लिए एक विशेष वाक्यविन्यास शामिल है, और दुभाषिया में नियमित अभिव्यक्तियों के लिए स्ट्रिंग्स का मिलान करने के लिए एक इंजन होता है। रेगुलर-एक्सप्रेशन इंजन एक बैकट्रैकिंग एल्गोरिदम का उपयोग करता है, जो सरल पैटर्न मिलान से लेकर स्ट्रिंग कैप्चर और प्रतिस्थापन तक अपनी क्षमताओं का विस्तार करता है। नियमित-अभिव्यक्ति इंजन हेनरी स्पेंसर द्वारा लिखित रेजेक्स से लिया गया है। पर्ल नियमित-अभिव्यक्ति वाक्यविन्यास मूल रूप से यूनिक्स संस्करण 8 नियमित अभिव्यक्तियों से लिया गया था। हालाँकि, यह पर्ल की पहली रिलीज़ से पहले अलग हो गया और तब से इसमें और अधिक सुविधाएँ शामिल की गई हैं। कई अन्य भाषाएँ और अनुप्रयोग अब पोसिक्स नियमित अभिव्यक्तियों पर पर्ल संगत नियमित अभिव्यक्तियों को अपना रहे हैं, जैसे कि पी. एच. पी., रूबी, जावा, माइक्रोसॉफ्ट का. नेट फ्रेमवर्क और अपाचे एच. टी. टी. पी. सर्वर। इतिहास के कारण नियमित अभिव्यक्ति वाक्यविन्यास बेहद संक्षिप्त है। पहली नियमित-अभिव्यक्ति बोलियाँ ग्लोब की तुलना में केवल थोड़ी अधिक अभिव्यंजक थीं, और वाक्यविन्यास को इस तरह से डिज़ाइन किया गया था कि एक अभिव्यक्ति उस पाठ से मिलती-जुलती हो जिससे वह मेल खाती हो। इसका मतलब था कि कुछ समर्थित दावों को व्यक्त करने के लिए एक से अधिक विराम चिह्न वर्ण या परिसीमन वर्णों की एक जोड़ी का उपयोग नहीं करना। समय के साथ, नियमित अभिव्यक्तियों की अभिव्यक्ति में जबरदस्त वृद्धि हुई, लेकिन वाक्यविन्यास डिजाइन को कभी संशोधित नहीं किया गया और विराम चिह्न पर निर्भर रहना जारी है। नतीजतन, नियमित अभिव्यक्तियाँ गूढ़ और बेहद घनी हो सकती हैं। उपयोग m// (मिलान) प्रचालक एक नियमित-अभिव्यक्ति मिलान प्रस्तुत करता है। (यदि इसे स्लैश द्वारा सीमांकित किया जाता है, जैसा कि यहाँ के सभी उदाहरणों में है, तो संक्षिप्तता के लिए अग्रणी m को छोड़ा जा सकता है। यदि एम मौजूद है, जैसा कि निम्नलिखित सभी उदाहरणों में है, तो स्लैश के स्थान पर अन्य परिसीमकों का उपयोग किया जा सकता है।) सबसे सरल मामले में, एक अभिव्यक्ति जैसे कि $x = ~/abc/; का मूल्यांकन तभी सही होता है जब स्ट्रिंग $x नियमित अभिव्यक्ति abc से मेल खाती है। दूसरी ओर, s// (स्थानापन्न) प्रचालक एक खोज-और-प्रतिस्थापन प्रचालन को निर्दिष्ट करता हैः $x = ~ s/abc/aBc/; #b को ऊपर उठाएँ नियमित अभिव्यक्तियों का एक और उपयोग विभाजन फलन के लिए परिसीमन को निर्दिष्ट करना हैः @words = विभाजन/,/, $रेखा; विभाजन फलन स्ट्रिंग के उन भागों की एक सूची बनाता है जो नियमित अभिव्यक्ति से मेल खाते हैं। इस उदाहरण में, एक पंक्ति को अपने स्वयं के अल्पविराम से अलग किए गए भागों की सूची में विभाजित किया जाता है, और फिर इस सूची को @words सरणी को सौंपा जाता है। सिंटैक्स मॉडिफायर्स पर्ल रेगुलर एक्सप्रेशन मॉडिफायर्स ले सकते हैं। ये एकल-अक्षर प्रत्यय हैं जो अभिव्यक्ति के अर्थ को संशोधित करते हैंः $x = ~/abc/i; #केस-असंवेदनशील पैटर्न $x = ~ s/abc/g से मेल खाता है; #वैश्विक खोज और प्रतिस्थापन क्योंकि नियमित अभिव्यक्तियों का संक्षिप्त वाक्यविन्यास उन्हें घना और गुप्त बना सकता है, प्रोग्रामरों को अधिक सुपाठ्य नियमित अभिव्यक्तियों को लिखने में मदद करने के लिए/x संशोधक को पर्ल में जोड़ा गया था। यह प्रोग्रामरों को नियमित अभिव्यक्तियों के भीतर श्वेत स्थान और टिप्पणियों को रखने की अनुमति देता हैः $x = ~/a #मिलान 'a'। #के बाद कोई भी वर्ण c #होता है और उसके बाद 'c' वर्ण/x होता है; एक नियमित अभिव्यक्ति के अंश को कोष्ठक में संलग्न किया जा सकता है; एक मिलान स्ट्रिंग के संबंधित भागों को पकड़ा जाता है। कैप्चर्ड स्ट्रिंग्स को अनुक्रमिक अंतर्निहित चर $1, $2, $3,. को सौंपा जाता है और कैप्चर्ड स्ट्रिंग्स की एक सूची मैच के मूल्य के रूप में वापस की जाती है। $x = ~/a (। ) c/; #'a' और 'c' के बीच के वर्ण को पकड़ें $1, $2, $3, का उपयोग कोड में बाद में किया जा सकता है। पर्ल नियमित अभिव्यक्तियाँ अंतर्निर्मित या उपयोगकर्ता-परिभाषित कार्यों को/ई परिवर्तक का उपयोग करके कब्जा किए गए मिलान पर लागू करने की अनुमति देती हैंः $x = "संतरे"; $x = ~ s/(ge)/uc ($1)/e; #संतरे $x. = $1; #पिछले कथन में मिलान की सामग्री के साथ x जोड़ेंः संतरे ऑब्जेक्ट पर्ल में ऑब्जेक्ट-ओरिएंटेड कोड लिखने के कई तरीके हैं। सबसे बुनियादी "धन्य" संदर्भों का उपयोग करना है। यह किसी दिए गए पैकेज से संबंधित किसी भी प्रकार के संदर्भ की पहचान करके काम करता है, और पैकेज धन्य संदर्भ के लिए तरीके प्रदान करता है। उदाहरण के लिए, एक द्वि-आयामी बिंदु को इस तरह से परिभाषित किया जा सकता हैः उप बिंदुःः नया {#यहाँ, बिंदु-> नया (4,5) के परिणामस्वरूप $वर्ग 'बिंदु' होगा। #यह उपवर्गीकरण का समर्थन करने के लिए एक चर है (परलूप पृष्ठ देखें)। मेरा ($वर्ग, $x, $y) = @_; आशीर्वाद [$x, $y], $वर्ग; #अंतर्निहित वापसी} उप बिंदुः दूरी {मेरा ($स्वयं, $से) = @_; मेरा ($dx, $dy) = ($$स्वयं [0]-$$से [0], $स्वयं [1]-$से [1]); sqrt ($dx * $dx + $dy * $dy);} इस वर्ग का उपयोग उदाहरण बनाने के लिए नए () का आह्वान करके और उन उदाहरणों पर दूरी का आह्वान करके किया जा सकता है। मेरा $p1 = प्वाइंट-> नया (3,4); मेरा $p2 = प्वाइंट-> नया (0,0); प्रिंट $p1-> दूरी ($p2); #प्रिंट 5 कई आधुनिक पर्ल अनुप्रयोग मूस ऑब्जेक्ट सिस्टम का उपयोग करते हैं। मूस को क्लासःः एमओपी के शीर्ष पर बनाया गया है, जो एक मेटा-ऑब्जेक्ट प्रोटोकॉल है, जो मूस का उपयोग करने वाले सभी वर्गों के लिए पूर्ण आत्मनिरीक्षण प्रदान करता है। इस प्रकार आप कक्षाओं से उनकी विशेषताओं, माता-पिता, बच्चों, तरीकों आदि के बारे में पूछ सकते हैं। एक साधारण एपीआई का उपयोग करना। मूस वर्ग-एक वर्ग में शून्य या अधिक विशेषताएँ होती हैं। एक वर्ग में शून्य या अधिक विधियाँ होती हैं। एक वर्ग में शून्य या अधिक सुपरक्लास (उर्फ मूल वर्ग) होते हैं। एक वर्ग को अपने सुपरक्लास (ई. एस.) से विरासत में मिलता है। एक वर्ग शून्य या अधिक भूमिकाएँ करता है, जो उप-वर्गीकरण के बिना वर्गों में पूर्व-परिभाषित कार्यक्षमता जोड़ने की क्षमता को जोड़ता है। क्लास में एक कंस्ट्रक्टर और एक डिस्ट्रक्टर होता है। एक वर्ग में एक मेटाक्लास होता है। एक वर्ग में शून्य या अधिक विधि परिवर्तक होते हैं। ये परिवर्तक अपने स्वयं के तरीकों, उन तरीकों पर लागू हो सकते हैं जो इसके पूर्वजों से विरासत में मिली हैं, या उन तरीकों पर जो भूमिकाओं द्वारा प्रदान की जाती हैं। मूस भूमिकाः एक भूमिका कुछ ऐसा है जो एक वर्ग करता है, कुछ हद तक अन्य ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं में मिक्सिन या इंटरफेस की तरह। मिक्सिन और इंटरफेस के विपरीत, भूमिकाओं को अलग-अलग वस्तु उदाहरणों पर लागू किया जा सकता है। एक भूमिका में शून्य या अधिक विशेषताएँ होती हैं। एक भूमिका में शून्य या अधिक तरीके होते हैं। एक भूमिका में शून्य या अधिक विधि परिवर्तक होते हैं। एक भूमिका में शून्य या अधिक आवश्यक तरीके होते हैं। उदाहरण मूज़ एक्स का उपयोग करके लिखे गए वर्ग का एक उदाहरण हैः मूज़ एक्स का उपयोग करें; मूज़ एक्स का उपयोग करें; घोषित करें; वर्ग प्वाइंट 3 डी बिंदु का विस्तार करता है {है 'z' => (आईएसए => 'Num', => 'rw'); स्पष्ट के बाद {$self-> z (0);} विधि सेट _ से (Num $x, Num $y, Num $z) {$self-> x ($x); $self-> y ($y); $self-> z ($z);} यह पॉइंट 3 डी नामक एक वर्ग है जो मूस उदाहरणों में बताए गए पॉइंट नामक एक अन्य वर्ग का विस्तार करता है। यह अपने आधार वर्ग में एक नई विशेषता z जोड़ता है, विधि को पुनर्परिभाषित करता है और विधि को स्पष्ट रूप से विस्तारित करता है। संदर्भ बाहरी लिंक पर्ल ट्यूटोरियल लगभग 2 घंटे 30 मिनट में पर्ल सीखें पर्लमोंक्स एक समुदाय जो पर्ल ज्ञान और कोडिंग युक्तियों को साझा करने के लिए प्रतिबद्ध है। पर्ल कोड पर्ल के उदाहरण वाले लेख