क्या यह निर्धारित करने का कोई तरीका है कि किसी सबराउटिन को विधि के रूप में बुलाया जाता है (@ISA जांच के साथ) या सादा सबराउटिन के रूप में? शायद किसी प्रकार के एक्सटेंशन मॉड्यूल सुपर -caller() के साथ?पर्ल में, मैं कैसे निर्धारित कर सकता हूं कि एक विधि के रूप में एक subroutine लागू किया गया था?
उदाहरण के लिए,
package Ad::Hoc;
sub func() { ... }
दिया कैसे func()
निम्न दो आमंत्रण के बीच भेद कर सकते हैं:
Ad::Hoc->func; # or $obj->func
Ad::Hoc::func('Ad::Hoc'); # or func($obj)
(मुझे पता है, यह करने के लिए इच्छा गरीब डिजाइन ™ की एक संभावना संकेत है।)
लेकिन यदि आप विधि की एक चर संख्या को स्वीकार करते हैं तो आपको केवल इसका उपयोग करने की आवश्यकता है। अन्यथा, आप बस '_ _' के आकार की जांच कर सकते हैं। – ikegami
+1 बहुत ही आशाजनक है। मुझे 'घातक "पुशमार्क या पैड" त्रुटि मिलती है यदि मैं' as_as_method() '(5.18.0, PadWalker-1.96, D :: Caller-2.06) के साथ' $ धन्य-> func' आज़माता हूं, लेकिन "पैकेज विधि" आमंत्रण जैसा कि आप ऊपर बताते हैं, पूरी तरह से काम करता है। – pilcrow
@ikegami, सहमत हुए। यह तकनीकी जिज्ञासा एक समस्या से बाहर हो गई है जिसे शायद पहले स्थान पर अनुमति नहीं दी जानी चाहिए। – pilcrow