Μετάβαση στο περιεχόμενο
cd /languages
  • Κληρονομιά σεναρίων
  • Προγραμματισμός
  • Υποστήριξη AST και συμβόλων

Perl στο Maguyva: γράφοι πακέτων και υπορουτινών

Το Maguyva υποστηρίζει Perl με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να παρακολουθούν πακέτα, υπορουτίνες, εισαγωγές use και require και κατασκευαστές σε παλαιό Perl.

Γιατί η κληρονομιά σε 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 και ποιες υπορουτίνες του καλούν;» (dependency_search incoming)
  • «Πού δημιουργείται το Report::Monthly και τι συμβαίνει μετά το ->new;» (find_symbol, μετά get_task_context)
  • «Βρες όλα τα αρχεία ελέγχου που δοκιμάζουν το Auth::Session.» (text_pattern_search, μετά find_symbol)

Γνωστοί περιορισμοί

  • Οι κλασικές μέθοδοι Perl είναι απλές δηλώσεις sub μέσα σε ένα πακέτο, οπότε στη δομική αναζήτηση μόνο η νεότερη αποκλειστική σύνταξη method κατατάσσεται ως μέθοδος. Για παλαιότερο αντικειμενοστραφές Perl χρησιμοποιήστε την προεπιλογή functions.
  • Οι κλήσεις σε φιλτραρισμένες ενσωματωμένες συναρτήσεις δεν εμφανίζονται ως ακμές του γράφου. Χρησιμοποιήστε το text_pattern_search όταν χρειάζεστε κάθε κλήση της open ή της print.

Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον γρήγορο οδηγό εκκίνησης και έπειτα δείτε τον πίνακα υποστήριξης στη σελίδα συμβατότητας. Αν η κληρονομιά μεταφέρεται σε άλλη γλώσσα σεναρίων, συγκρίνετε με τον οδηγό για την Python.

Ιδανική χρήση

  • > Ομάδες που κληρονόμησαν υπηρεσίες Perl, εφαρμογές CGI ή σενάρια δέσμης και αναφορών που ακόμη τρέχουν στην παραγωγή.
  • > Βάσεις κώδικα βασισμένες σε αρθρώματα, όπου πακέτα `.pm` μοιράζονται πολλά σενάρια και αρχεία ελέγχου.
  • > Εργασίες μετάπτωσης ή απόσυρσης, όπου το πρώτο ερώτημα είναι ποια σενάρια εξαρτώνται από ποια αρθρώματα.

Ροές εργασίας πρακτόρων

  • > Καταγραφή κάθε σεναρίου και αρθρώματος που χρησιμοποιεί ένα κοινόχρηστο πακέτο πριν αυτό αλλάξει.
  • > Εύρεση του σημείου όπου μια κλάση δημιουργείται με `->new` και των υπορουτινών που καλεί στη συνέχεια.
  • > Παρακολούθηση μιας αναφοράς ή μιας εργασίας από το αρχικό σενάριο μέσα από τα αρθρώματα που φορτώνει.

Λεπτομέρειες μηχανής

  • > Η υποστήριξη Perl καλύπτει `.pl`, `.pm`, `.t`, `.pod` και `.perl`. Οι υπορουτίνες είναι συναρτήσεις και οι δηλώσεις `package` είναι κλάσεις.
  • > Τα sigils αφαιρούνται από τα ονόματα ορισμών, τα `use` και `require` γίνονται εισαγωγές, και το `Class->new` μετρά ως δημιουργία στιγμιοτύπου.
  • > Περίπου 189 ενσωματωμένες συναρτήσεις, όπως `print`, `open` και `die`, φιλτράρονται από τις κλήσεις, ενώ τα `bless` και `tie` παραμένουν στον γράφο.

Χρήσιμα σημεία εισόδου MCP

  • find_symbol

    Χρησιμοποιήστε το με όνομα πακέτου ή υπορουτίνας· τα sigils αφαιρούνται, οπότε αναζητήστε με το σκέτο όνομα.

  • dependency_search

    Χρησιμοποιήστε διάσχιση incoming σε ένα κοινόχρηστο άρθρωμα για να δείτε ποια σενάρια και πακέτα εξαρτώνται από αυτό.

  • text_pattern_search

    Χρησιμοποιήστε το για φιλτραρισμένες ενσωματωμένες συναρτήσεις, κλειδιά ρυθμίσεων και συμβολοσειρές SQL που μένουν εκτός γράφου κλήσεων.