تخطَّ إلى المحتوى
cd /languages
  • إرث السكربتات
  • البرمجة
  • دعم AST والرموز

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

يدعم Maguyva لغة Perl بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الحزم والإجراءات الفرعية واستيرادات use وrequire والمُنشئات في شيفرة Perl القديمة.

لماذا يصعب تغيير إرث 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.

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

اربط مستودعًا عبر دليل البدء السريع، ثم راجع مصفوفة الدعم في صفحة التوافق. وإذا كان الإرث سينتقل إلى لغة سكربتات أخرى، فقارن مع دليل لغة Python.

الأنسب لـ

  • > الفرق التي ورثت خدمات Perl أو تطبيقات CGI أو سكربتات الدُفعات والتقارير التي ما زالت تعمل في بيئة الإنتاج.
  • > قواعد الشيفرة المبنية على الوحدات، حيث تتشارك سكربتات وملفات اختبار كثيرة حزمَ `.pm`.
  • > أعمال الترحيل أو الإيقاف، حيث يكون السؤال الأول: أي السكربتات يعتمد على أي الوحدات؟

سير عمل الوكلاء

  • > سرد كل سكربت ووحدة تستخدم حزمة مشتركة قبل تغييرها.
  • > العثور على موضع إنشاء فئة عبر `->new` والإجراءات الفرعية التي تستدعيها بعد ذلك.
  • > تتبّع تقرير أو مهمة من سكربت الدخول عبر الوحدات التي يحمّلها.

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

  • > يغطي دعم 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 التي تبقى خارج الرسم البياني للاستدعاءات.