सामग्री पर जाएँ
cd /languages
  • स्क्रिप्टिंग विरासत
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

Maguyva में Perl: पैकेज और सबरूटीन ग्राफ़

Maguyva, Perl को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट legacy Perl में पैकेज, सबरूटीन, use और require इम्पोर्ट, और कंस्ट्रक्टर ट्रेस कर सकें।

Perl विरासत को सुरक्षित रूप से बदलना कठिन क्यों है

Perl कोड घना और लचीला होता है, और अक्सर ऐसे लोगों ने लिखा होता है जो सालों पहले जा चुके हैं। sigils किसी नाम का अर्थ बदल देते हैं, पैकेज क्लास का काम भी करते हैं, और एक ही मॉड्यूल कई डायरेक्टरी की स्क्रिप्ट से लोड होता है। टेक्स्ट सर्च स्ट्रिंग ढूँढ लेता है, लेकिन एजेंट को यह नहीं बताता कि कोई स्क्रिप्ट असल में कौन-सा सबरूटीन कॉल करती है।

Maguyva एजेंट को पैकेज, सबरूटीन, इम्पोर्ट और कंस्ट्रक्टर संरचना के रूप में देता है, ताकि वह कोड छूने से पहले बदलाव का दायरा तय कर सके।

Maguyva, Perl से क्या निकालता है

Maguyva .pl, .pm, .t, .pod और .perl को कवर करता है। सबरूटीन फ़ंक्शन के रूप में और package घोषणाएँ क्लास के रूप में निकाली जाती हैं, और परिभाषा नामों से sigils ($, @, %, &, *) हटा दिए जाते हैं, ताकि वेरिएबल और सबरूटीन उनके सीधे नाम से खोजे जा सकें।

इम्पोर्ट use, require और package स्टेटमेंट से आते हैं। Class->new के रूप वाले मेथड कॉल इंस्टैंशिएशन गिने जाते हैं, और bless व tie कॉल ग्राफ़ में जान-बूझकर रखे जाते हैं। ग्राफ़ इनहेरिटेंस, ओवरराइड, टाइप रेफ़रेंस, रीड और राइट, और एक्सेप्शन रेज़ भी दर्ज करता है।

लगभग 189 बिल्ट-इन फ़ंक्शन (print, open, die, warn और इसी तरह के) कॉल संबंधों से फ़िल्टर किए जाते हैं, ताकि रिपॉज़िटरी का कोड अलग दिखे।

एजेंट प्रॉम्प्ट के उदाहरण

  • “कौन-सी स्क्रिप्ट Billing::Invoice इस्तेमाल करती हैं, और वे उसके कौन-से सबरूटीन कॉल करती हैं?” (incoming दिशा में dependency_search)
  • “Report::Monthly कहाँ बनता है, और ->new के बाद क्या होता है?” (find_symbol, फिर get_task_context)
  • “Auth::Session को टेस्ट करने वाली सभी टेस्ट फ़ाइलें ढूँढो।” (text_pattern_search, फिर find_symbol)

ज्ञात सीमाएँ

  • पारंपरिक Perl मेथड किसी पैकेज के अंदर साधारण sub घोषणाएँ होते हैं, इसलिए स्ट्रक्चरल सर्च में सिर्फ़ नया, समर्पित method सिंटैक्स ही मेथड के रूप में वर्गीकृत होता है। पुराने ऑब्जेक्ट-ओरिएंटेड Perl के लिए functions प्रीसेट इस्तेमाल करें।
  • फ़िल्टर किए गए बिल्ट-इन को किए गए कॉल ग्राफ़ एज के रूप में नहीं दिखते। जब आपको हर open या print कॉल चाहिए, तो text_pattern_search इस्तेमाल करें।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। अगर विरासत कोड किसी दूसरी स्क्रिप्टिंग भाषा में जा रहा है, तो Python गाइड से तुलना करें।

सबसे उपयुक्त

  • > वे टीमें, जिन्हें विरासत में Perl सेवाएँ, CGI ऐप्लिकेशन या बैच और रिपोर्ट स्क्रिप्ट मिली हैं, जो अब भी प्रोडक्शन में चलती हैं।
  • > मॉड्यूल-आधारित कोडबेस, जहाँ `.pm` पैकेज कई स्क्रिप्ट और टेस्ट फ़ाइलों में साझा होते हैं।
  • > माइग्रेशन या डीकमीशन का काम, जहाँ पहला सवाल यह है कि कौन-सी स्क्रिप्ट किन मॉड्यूल पर निर्भर हैं।

एजेंट वर्कफ़्लो

  • > किसी साझा पैकेज को बदलने से पहले उसे इस्तेमाल करने वाली हर स्क्रिप्ट और मॉड्यूल की सूची बनाना।
  • > कोई क्लास `->new` से कहाँ बनती है और उसके बाद कौन-से सबरूटीन कॉल होते हैं, यह ढूँढना।
  • > किसी रिपोर्ट या जॉब को एंट्री स्क्रिप्ट से उसके लोड किए गए मॉड्यूल तक ट्रेस करना।

इंजन विवरण

  • > Perl सपोर्ट `.pl`, `.pm`, `.t`, `.pod` और `.perl` को कवर करता है। सबरूटीन फ़ंक्शन हैं, और `package` घोषणाएँ क्लास हैं।
  • > परिभाषा नामों से sigils हटा दिए जाते हैं, `use` और `require` इम्पोर्ट बनते हैं, और `Class->new` इंस्टैंशिएशन गिना जाता है।
  • > `print`, `open` और `die` जैसे लगभग 189 बिल्ट-इन फ़ंक्शन कॉल से फ़िल्टर किए जाते हैं, जबकि `bless` और `tie` ग्राफ़ में रहते हैं।

उपयोगी MCP एंट्री पॉइंट

  • find_symbol

    किसी पैकेज या सबरूटीन नाम के साथ इस्तेमाल करें; sigils हटा दिए जाते हैं, इसलिए सीधे नाम से खोजें।

  • dependency_search

    किसी साझा मॉड्यूल पर incoming ट्रैवर्सल इस्तेमाल करें, ताकि पता चले कि कौन-सी स्क्रिप्ट और पैकेज उस पर निर्भर हैं।

  • text_pattern_search

    फ़िल्टर किए गए बिल्ट-इन, कॉन्फ़िग कुंजियाँ और उन SQL स्ट्रिंग के लिए इस्तेमाल करें जो कॉल ग्राफ़ से बाहर रहती हैं।

संबंधित गाइड

रिपॉज़िटरी के संबंधित हिस्से

सभी गाइड ब्राउज़ करें