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

Canonical source: https://maguyva.ai/hi/languages/perl

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .perl, .pl, .pm, .pod, .t
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

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

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

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

## 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` इस्तेमाल करें।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। अगर विरासत कोड किसी दूसरी स्क्रिप्टिंग भाषा में जा रहा है, तो [Python गाइड](/hi/languages/python) से तुलना करें।

## इंजन विवरण

- 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 स्ट्रिंग के लिए इस्तेमाल करें जो कॉल ग्राफ़ से बाहर रहती हैं।
