# لغة Perl في Maguyva: رسوم بيانية للحزم والإجراءات الفرعية

Canonical source: https://maguyva.ai/ar/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 والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الحزم والإجراءات الفرعية واستيرادات use وrequire والمُنشئات في شيفرة Perl القديمة.

## لمحة عن الدعم

- المستوى: دعم 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` فئاتٍ، وتُحذف الرموز البادئة (`$` و`@` و`%` و`&` و`*`) من أسماء التعريفات، فيمكن البحث عن المتغيرات والإجراءات الفرعية بأسمائها المجرّدة.

تأتي الاستيرادات من عبارات `use` و`require` و`package`. وتُعدّ استدعاءات الأساليب بصيغة `Class->new` إنشاءً لمثيلات، بينما يُستبقى `bless` و`tie` عمدًا في الرسم البياني للاستدعاءات. ويسجّل الرسم البياني أيضًا الوراثة والتجاوزات ومراجع الأنواع والقراءات والكتابات وإطلاق الاستثناءات.

يُستبعد من علاقات الاستدعاء نحو 189 دالة مدمجة (`print` و`open` و`die` و`warn` وما شابهها)، لتبرز شيفرة المستودع.

## أمثلة على مطالبات الوكلاء

- "ما السكربتات التي تستخدم `Billing::Invoice`، وأيّ إجراءاته الفرعية تستدعي؟" (`dependency_search` في الاتجاه الوارد)
- "أين يُنشأ `Report::Monthly`، وماذا يحدث بعد `->new`؟" (`find_symbol` ثم `get_task_context`)
- "اعثر على كل ملفات الاختبار التي تختبر `Auth::Session`." (`text_pattern_search` ثم `find_symbol`)

## القيود المعروفة

- أساليب Perl الكلاسيكية مجرد تصريحات `sub` داخل حزمة، لذا لا يُصنَّف أسلوبًا في البحث البنيوي إلا الصياغة الأحدث المخصصة `method`. استخدم الإعداد المسبق `functions` لشيفرة Perl الكائنية القديمة.
- لا تظهر الاستدعاءات إلى الدوال المدمجة المستبعدة حوافَّ في الرسم البياني. استخدم `text_pattern_search` حين تحتاج إلى كل استدعاء لـ `open` أو `print`.

## الخطوات التالية

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). وإذا كان الإرث سينتقل إلى لغة سكربتات أخرى، فقارن مع [دليل لغة Python](/ar/languages/python).

## تفاصيل المحرك

- يغطي دعم Perl الملفات `.pl` و`.pm` و`.t` و`.pod` و`.perl`. الإجراءات الفرعية دوال، وتصريحات `package` فئات.
- تُحذف الرموز البادئة من أسماء التعريفات، وتصبح `use` و`require` استيرادات، ويُعدّ `Class->new` إنشاءً لمثيل.
- يُستبعد من الاستدعاءات نحو 189 دالة مدمجة مثل `print` و`open` و`die`، ويبقى `bless` و`tie` في الرسم البياني.

## نقاط دخول مفيدة عبر MCP

- `find_symbol`: استخدمه مع اسم حزمة أو إجراء فرعي؛ تُحذف الرموز البادئة، فابحث بالاسم المجرّد.
- `dependency_search`: استخدم التتبّع في الاتجاه الوارد على وحدة مشتركة لرؤية السكربتات والحزم التي تعتمد عليها.
- `text_pattern_search`: استخدمه للدوال المدمجة المستبعدة ومفاتيح الإعدادات وسلاسل SQL التي تبقى خارج الرسم البياني للاستدعاءات.
