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

Canonical source: https://maguyva.ai/el/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 να παρακολουθούν πακέτα, υπορουτίνες, εισαγωγές 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` ως κλάσεις, ενώ από τα ονόματα ορισμών αφαιρούνται τα 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`.

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

Συνδέστε ένα αποθετήριο με τον [γρήγορο οδηγό εκκίνησης](/el/docs/quickstart) και έπειτα δείτε τον πίνακα υποστήριξης στη [σελίδα συμβατότητας](/el/docs/compatibility). Αν η κληρονομιά μεταφέρεται σε άλλη γλώσσα σεναρίων, συγκρίνετε με τον [οδηγό για την Python](/el/languages/python).

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

- Η υποστήριξη 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 που μένουν εκτός γράφου κλήσεων.
