Γιατί η κληρονομιά σε 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.