पर्ल ऑब्जेक्ट एनवायरनमेंट


 * मैच संस्करण के लिए, मैच (कर्नेल) देखें

'पर्ल ऑब्जेक्ट एनवायरनमेंट' या 'पीओई' रोक्को कैपुटो एट अल द्वारा पर्ल प्रोग्रामिंग लैंग्वेज में लिखी गई पर्ल मॉड्यूल की एक लाइब्रेरी (कंप्यूटिंग) है।

सीपीएएन से:
 * "पीओई मूल रूप से एक सतत ऑब्जेक्ट सर्वर और रनटाइम एनवायरनमेंट के मूल के रूप में विकसित किया गया था। यह एक जनरल पर्पस मल्टीटास्किंग और नेटवर्किंग फ्रेमवर्क के रूप में विकसित हुआ है, जो इवेंट और टीके (सॉफ़्टवेयर) और जीटीके टूलकिट जैसे अन्य इवेंट प्रोग्राम लूप्स के लिए एक कंसिस्टेंट इंटरफ़ेस प्रदान करता है।"

पीओई अर्कीटेक्चर: अब्स्ट्रैक्शन की लेयर्स
पीओई, पर्ल ऑब्जेक्ट एनवायरनमेंट को एक छोटे मॉड्यूलर ऑपरेटिंग सिस्टम के रूप में सोचा जा सकता है। एक या अधिक पीओई प्रोग्राम या इंस्टेंसेस एक साथ चलाए जा सकते हैं और सामान्यतः कोअपरेटिव मल्टीटास्किंग के लिए उपयुक्त होते हैं। पीओई पैकेज में नेमस्पेस और एब्स्ट्रैक्शन (कंप्यूटर विज्ञान) सम्मिलित हैं जो ओपन-एंडेड सीपीएएन-शैली कन्वेंशन में पीओई के भविष्य के डेवलपमेंट को गाइड करते हैं।

इवेंट लेयर
इनफॉर्मल अर्कीटेक्चर में नीचे की तरफ कर्नेल (ऑपरेटिंग सिस्टम) के साथ लेयर्स का एक सेट होता है। यह छोटा कर्नेल ईवेंट लेयर का प्रतिनिधित्व करता है जो प्रत्येक चल रहे पीओई उदाहरण के मुख्य लूप के रूप में कार्य करता है। पहली कॉल इवेंट डिस्पैचर - पीओई::कर्नेल को होती है।

पीओई::कर्नेल नेमस्पेस में फ़ंक्शंस का एक सूट होता है जो कर्नेल में ही प्लग किया जाता है। ये लूप एब्स्ट्रैक्शन पीओई के स्टैंडर्डआइज़ड इवेंट लूप ब्रिज इंटरफ़ेस - पीओई::लूप के बाद डिज़ाइन किए गए हैं। इन्हें रनटाइम सर्विसेस और इंटरप्रोसेस संचार के लिए तथा एक सरल सुविधा प्रदान करने के लिए आवश्यकतानुसार मिश्रित और मिलान किया जा सकता है। मूल कार्य पीओई::लूप::इवेंट, पीओई::लूप::पोल और पीओई::लूप::सैलैक्ट हैं। पीओई::लूप::टीके और पीओई::लूप::जीटीके भी उपलब्ध हैं जो बाहरी एनवायरनमेंट में अन्य लूप ब्रिजों में हुक प्रदान करते हैं। यदि यह पर्याप्त नहीं है, तो पीओई::लूप कर्नेल एब्स्ट्रैक्शन पुन: प्रयोज्य सिग्नल कॉलबैक, समय या अलार्म कॉलबैक, और फ़ाइलहैंडल गतिविधि कॉलबैक के साथ-साथ इवेंट लूप को आरंभ करने, निष्पादित करने और अंतिम रूप देने जैसे प्रशासनिक कार्य प्रदान करता है।

एक उच्च स्तरीय पैकेजिंग स्ट्रक्चर भी है - पीओई::मैक्रो और उनके परीक्षण के लिए एक डिबगिंग उपयोगिता जिसे पीओई::प्रीप्रोसेसर कहा जाता है। इस ढांचे से पीओई::मैक्रो::यूज़बाइट्स प्राप्त हुआ है।


 * नोट: जैसा कि पर्ल परंपरा का आदेश है, पीओई भी एक गतिशील लक्ष्य है।

यह देखने के लिए हमेशा सीपीएएन जांचें कि समुदाय ने संग्रह में कौन सी नई चीज़ें रखी हैं। (...और पर्ल का आदर्श वाक्य याद रखें: लैरी वॉल के अनुसार इसे करने का एक से अधिक तरीका है।)

रनिंग कर्नेल पीओई::सेशन आर्किटेक्चर द्वारा शासित अब्स्ट्रैक्शन के दूसरे सेट से निर्मित प्राइमर्डियल परिमित-राज्य मशीनों के माध्यम से संचालित होता है। एक पीओई::सैशन को लगभग तुच्छ रूप से फ़ंक्शंस, क्लास विधि (कंप्यूटर प्रोग्रामिंग), और/या ऑब्जेक्ट मेथड जो उन्हें संभालते हैं, के इवेंट मैप के रूप में परिभाषित किया गया है। पीओई::सत्र ऑब्जेक्ट में इसके सभी आयोजन प्रबंधकर्ता द्वारा साझा किया गया एक स्टोरेज स्पेस भी होता है, जिसे ढेर (प्रोग्रामिंग) कहा जाता है। आप उन्हें किसी भी तरह से काट लें, राज्य ठोस रूप से पहचाने जाते हैं और स्पष्ट रूप से परिभाषित होते हैं।

एक अधिक विशिष्ट इवेंट हैंडलर एक पीओई::सैशन उपवर्ग है जिसे पीओई::NFA कहा जाता है - एक इवेंट-संचालित नॉनडेटर्मिनिस्टिक परिमित ऑटोमेटन (एक स्मार्ट परिमित राज्य मशीन)। यह ईवेंट हैंडलर ईवेंट, पोल, उपयोगकर्ता चयन या अन्य बाहरी ईवेंट की आवश्यकता के अनुसार एक कड़ाई से परिभाषित स्थिति से दूसरे में चला जाता है। यह परिमित-राज्य मशीन सामान्य इवेंट-संचालित प्रोग्रामिंग थ्रेड (कंप्यूटिंग) की एक विस्तृत श्रृंखला को समाहित करने का काम करती है, जो अपेक्षाकृत इनफॉर्मल पीओई::सैशन की तुलना में निष्पादन पथ पर अधिक सख्त ट्रैकिंग की अनुमति देती है।

आई/ओ लेयर
कर्नेल की अगली आवश्यकता इनपुट-आउटपुट हैंडलर के लिए है जो व्हील्स नामक एकल I/O लेयर में मौजूद होते हैं। पहिए कार्रवाई शुरू करते हैं, उनके परिणामस्वरूप निम्न-स्तरीय इवेंटओं को संभालते हैं, और उनका उपयोग करने वाले सत्रों के लिए उच्च-स्तरीय इवेंटओं का उत्पादन करते हैं। सेशन और लूप्स की तरह पहिये, अमूर्त तत्वों के एक समान सेट से निर्मित होते हैं - 'पीओई::व्हील' - जो कर्नेल के शीर्ष पर स्थित होते हैं। पीओई के आधार वितरण में सात अत्यधिक विशिष्ट और अच्छी तरह से परिभाषित पहिये हैं:
 * पीओई::Wheel::Run - पाइप, fork और कभी-कभी exec का उपयोग करके बाल प्रक्रियाओं को बनाता है और उनके साथ इंटरैक्ट करता है। बातचीत बच्चे के मानक इनपुट और आउटपुट के माध्यम से की जाती है।
 * पीओई::Wheel::SocketFactory - क्लाइंट और सर्वर सॉकेट को उनकी स्थापना की प्रतीक्षा किए बिना बनाने का एक तरीका।
 * पीओई::Wheel::Curses - कर्सेस (प्रोग्रामिंग लाइब्रेरी) टेक्स्ट इंटरफ़ेस लाइब्रेरी से नॉन-ब्लॉकिंग इनपुट के लिए एक हैंडलर। सीपीएएन घटक जैसे कि कर्स::यूआई::पीओई और टर्म::विज़ुअल इस पर आधारित हैं।
 * पीओई::व्हील::फॉलोटेल - लगातार बढ़ती फ़ाइल, जैसे लॉग या सहयोगी दस्तावेज़, को उसकी पूंछ पर एक हैंडल रखकर ट्रैक करता है।
 * पीओई::Wheel::ListenAccept - पीओई::Wheel::SocketFactory का एक सबसेट जिसका उपयोग मौजूदा सर्वर सॉकेट पर सुनने और दूरस्थ क्लाइंट से कनेक्शन स्वीकार करने के लिए किया जाता है।
 * पीओई::Wheel::ReadLine - एक नॉन-ब्लॉकिंग, इवेंट संचालित टर्म::ReadLine का एनालॉग।
 * पीओई::Wheel::ReadWrite - पीओई के लिए एक उच्च-प्रदर्शन अतुल्यकालिक I/O फ़ाइल हैंडलर जो पीओई के डिवाइस ड्राइवर और फ़िल्टर (सॉफ़्टवेयर) का उपयोग 'फ़ाइलहैंडल' पर बफ़र्ड पढ़ने और लिखने के लिए करता है जो अगली लेयर पर आता है - पीओई's स्वयं की छोटी फ़ाइल प्रणाली।

फ़ाइल लेयर्स
ड्राइवर फ़ाइल हैंडल को पढ़ने और लिखने का वास्तविक कार्य करते हैं। वे पीओई::Driver मॉड्यूल में निहित कम अमूर्त परिलैंग्वेजओं के अनुसार बनाए गए हैं। इस लेखन के समय लागू किया गया मुख्य ड्राइवर पीओई::Driver::SysRW है - एक सार्वभौमिक फ़ाइलहैंडल रीडर/लेखक जो विशेष रूप से पीओई::Wheel::ReadWrite के लिए डिज़ाइन किया गया है।

अगली लेयर, पीओई::Filter से निर्मित और संभवत: अधिकांश पर्ल ऑबफस्केशन एफिशियानाडोस का फोकस (नीचे पीओई #पीओई हास्य देखें), पीओई::Filter सेट है: फ़िल्टर कच्ची धाराओं के बीच अनुवाद करते हैं और स्वादिष्ट दादा के पके हुए टुकड़े। प्रति मैट कैशनर|`सुंगो'
 * पीओई::Filter::Block - इनपुट को निश्चित लंबाई वाले ब्लॉक के रूप में पार्स करता है। आउटपुट पक्ष पर, यह केवल डेटा को बिना किसी क्षति के पास करता है।
 * पीओई::Filter::HTTPD - इनपुट को HTTP अनुरोधों के रूप में पार्स करता है और उन्हें HTTP::Request ऑब्जेक्ट में अनुवादित करता है। आउटपुट पक्ष पर, यह HTTP::Response ऑब्जेक्ट लेता है और उन्हें वेब क्लाइंट/उपयोगकर्ता-एजेंट को भेजे जाने के लिए उपयुक्त चीज़ में बदल देता है।
 * पीओई::Filter::Line - आने वाली स्ट्रीम को लाइनों में पार्स करता है और आउटगोइंग लाइनों को स्ट्रीम में बदल देता है। यह बहुत बुनियादी हुआ करता था, लेकिन हाल के सुधारों में न्यूलाइन ऑटोडिटेक्शन जैसी दिलचस्प सुविधाएँ जोड़ी गई हैं।
 * पीओई::Filter::Reference - पीओई प्रोग्रामों के बीच या पीओई और अन्य पर्ल प्रोग्रामों के बीच पर्ल संरचनाएं भेजने के लिए उपयोग किया जाता है। इनपुट पक्ष पर, जमे हुए डेटा (स्टोरेबल, फ्रीज़थॉ, वाईएएमएल, या कुछ अन्य क्रमबद्धता तंत्र के माध्यम से) को पर्ल डेटा संरचनाओं में पिघलाया जाता है। आउटपुट पर, फ़िल्टर को दिए गए संदर्भ फ़्रीज़ हो जाते हैं। यदि Compress::Zlib स्थापित है तो अनुरोध पर डेटा को संपीड़ित भी किया जा सकता है।
 * पीओई::फ़िल्टर::स्ट्रीम - कुछ नहीं करता। यह बिना किसी बदलाव के केवल डेटा को पास करता है।

पूरी सूची के लिए पीओई at CPAN देखें

पीओई घटक
पीओई::घटक दस्तावेज़ीकरण के अनुसार पीओई में कई बड़े मॉड्यूलर प्रोग्रामिंग लिखे गए हैं। ये इवेंट-संचालित मॉड्यूल हैं, जिनमें से कई छोटे डेमॉन (कंप्यूटिंग) के रूप में कार्य करते हैं जो बड़े पैकेजों को सर्विसेस प्रदान करते हैं जिनसे वे संबंधित हैं। उनमें से कुछ मॉड्यूल के बीच उच्च-स्तरीय संचार की सुविधा प्रदान करते हैं, विशेष रूप से स्टैंड-अलोन एप्लिकेशन जिन्हें पर्ल के मुख्य वितरण से स्वतंत्र रहने की आवश्यकता होती है।

सामान्य तौर पर, पीओई घटक तैयार उच्च स्तरीय प्रक्रियाएं हैं जो विशिष्ट बड़े कार्य करते हैं। कुछ उदाहरण:

पीओई घटक अत्यधिक पुन: प्रयोज्य पुस्तकालय होते हैं जो कठिन कार्यों को संभालते हैं, प्रोग्रामर को अधिक दिलचस्प चीज़ों पर ध्यान केंद्रित करने के लिए स्वतंत्र करना। हालाँकि, यह किसी भी पुस्तकालय के लिए सच होना चाहिए।
 * घटक::सर्वर::टीसीपी - एक विशेष प्रयोजन टीसीपी सर्वलेट
 * घटक::क्लाइंट::टीसीपी - एक पीओई-जागरूक टीसीपी क्लाइंट
 * पीओई::घटक::आईआरसी - लगभग पूर्ण विशेषताओं वाला आईआरसी क्लाइंट।
 * पीओई::Component::Server::IRC - एक RFC 2810 से RFC 2813 अनुरूप IRC सर्वर (विकासाधीन)
 * पीओई::Component::UserBase - एक उपयोगकर्ता प्रमाणीकरण और डेटा दृढ़ता सर्वलेट।

पीओई हास्य

 * CPAN पर Acme::पीओई::घुटना मॉड्यूल।
 * पीओई क्या है के अंत में कई मूर्खतापूर्ण संक्षिप्तीकरण विस्तार।

यह भी देखें

 * इवेंट-संचालित प्रोग्रामिंग
 * ट्विस्टेड (सॉफ्टवेयर), पायथन (प्रोग्रामिंग लैंग्वेज) के लिए एक तुलनीय स्ट्रक्चर

बाहरी संबंध

 * पीओई Home Page (a Wiki site)