कोई भी आमतौर पर उत्प्रेरक :: नियंत्रक में जो कुछ भी दिखाया गया है उसे लिखता है। अब आपको याद रखना चाहिए कि उत्प्रेरक नियंत्रक आपका यूआरएल मैपिंग करने के लिए मौजूद है। निश्चित रूप से, नियंत्रक में बहुत से फ़ंक्शन आयात करना संभव है, लेकिन जब उत्प्रेरक स्वयं log
फ़ंक्शन आयात करता है, तो आप यूआरएल मैपिंग के लिए इस फ़ंक्शन का उपयोग कैसे करते हैं?
उदाहरण के लिए sub log : Local { ... }
। जल्द ही यह संभव नहीं होगा, या यह अधिक जटिल होगा तो यह होना चाहिए। एक नियंत्रक के पास लगभग कोई कार्य नहीं होता है, ताकि आपको बहुत से कार्यों को याद रखने की आवश्यकता न हो और कोई संघर्ष न हो।
इसी कारण से पर्ल स्वयं विशेष चर में विशेष पात्रों का चयन करना चुनता है। $/
, $_
, $]
और इसी तरह की तरह। निश्चित रूप से वे $INPUT_RECORD_SEPARATOR
या $RS
डिफ़ॉल्ट के रूप में भी उपयोग कर सकते हैं, लेकिन फिर आपको उन्हें जानने की आवश्यकता है, और यदि आप सभी विशेष चर नहीं जानते हैं तो शायद यह आपके कोड से संघर्ष कर सकता है।
एक अन्य कारण यह है कि $c
पर आपके अतिरिक्त विशेषताओं को आप कुछ संदर्भ देते हैं। उदाहरण के लिए आप $c->log->disable('warn', 'error')
के साथ लॉगिंग को सक्षम या अक्षम कर सकते हैं या बस उन्हें सक्षम कर सकते हैं। यह संदर्भ गहरा नियंत्रक में सही ढंग से पारित किया गया है। और वे वैश्विक नहीं हैं, आप उन्हें किसी अन्य राज्य में हर अनुरोध पर सेट कर सकते हैं।
एक और कारण यह है कि आपके द्वारा उपयोग की जाने वाली अतिरिक्त कार्यक्षमता और कभी-कभी कॉन्फ़िगरेशन फ़ाइल या अन्य चीजों को पढ़ने की आवश्यकता होती है। प्रत्येक अनुरोध के लिए आप जिस ऑब्जेक्ट को पास करते हैं उसका उपयोग करना (प्रत्येक $c
प्रत्येक अनुरोध के लिए विशेष है) और प्रत्येक अनुरोध के लिए संशोधित किया जा सकता है, आपके एक्सटेंशन को आपके आवेदन से जानकारी का अनुरोध करने या किसी विशिष्ट अनुरोध के लिए राज्य को संभालने की संभावना देता है।
लेकिन यदि आप अभी भी यह नहीं चाहते हैं, तो आपको $c
का उपयोग करने के लिए मजबूर नहीं किया जाता है। उदाहरण के लिए आप लॉग :: लॉग 4Perl मैन्युअल रूप से लोड कर सकते हैं, और इसके लिए एक विशेष कॉन्फ़िगरेशन का उपयोग कर सकते हैं, और $c->log
का उपयोग नहीं कर सकते हैं। या आप अपने आप से बहुत सारे काम आयात कर सकते हैं। लेकिन मुझे लगता है कि नेमस्पेस को प्रदूषित नहीं करना और आपको प्रत्येक अनुरोध के लिए कुछ विशेष करने की संभावना देना एक अच्छा डिफ़ॉल्ट है।
और कम से कम कोई नियम नहीं है कि आपको $c
का उपयोग करना होगा। उदाहरण के लिए, मैं स्वयं डेटटाइम का सीधे उपयोग करता हूं और नई ऑब्जेक्ट्स बनाता हूं और उत्प्रेरक :: प्लगइन :: डेटटाइम का उपयोग नहीं करता जो मुझे $c->datetime
करने की अनुमति देता है। और मुझे अंतिम करने का कोई लाभ नहीं दिख रहा है। सिर्फ इसलिए कि $c
तक फैले बहुत से प्लगइन मौजूद हैं, इसका मतलब यह नहीं है कि वे उपयोगी हैं या आपको उनका उपयोग करना होगा।
यह वास्तव में वाक्यविन्यास के बारे में कोई सवाल नहीं था ... हालांकि मैं राकुडो के तरीकों को कॉल करने का तरीका पसंद करता हूं ... – xenoterracide
@xenoterracide => आपने पूछा कि उत्प्रेरक ने क्यों लिखा है '$ c-> log-> चेतावनी (...) 'लॉग के बजाय (चेतावनी => ...)'। यह एक वाक्य रचनात्मक अंतर है। इसका कारण यह है कि उत्प्रेरक विचारों के लेखक सबसे अच्छे थे। तो मैंने आपको जिस तरह से चाहते थे उसे लिखने का एक तरीका दिया (हालांकि इस मामले में, यह 'लॉग() -> चेतावनी (...)' होगा क्योंकि उत्प्रेरक की 'लॉग' विधि काम करती है), किस प्रकार का क्या आप उम्मीद कर रहे थे? –
संदर्भ वस्तु के माध्यम से सब कुछ क्यों किया जाता है, इसके बारे में और पूछना, यहां तक कि बाहरी सामान भी इसके माध्यम से उपयोग किया जाता है। सिंटैक्स का सही संदर्भ संदर्भ वस्तु के माध्यम से क्यों अधिक स्पष्ट है। कहने के विरोध में, बस एक लॉग एपीआई का उपयोग कर सीधे। – xenoterracide