Waarom Perl-landschappen lastig veilig te wijzigen zijn
Perl-code is compact, flexibel en vaak geschreven door mensen die jaren geleden zijn vertrokken. Sigils veranderen de betekenis van een naam, pakketten doen ook dienst als klassen, en dezelfde module wordt geladen door scripts in veel mappen. Tekstzoeken vindt de strings, maar vertelt een agent niet welke subroutine een script echt aanroept.
Maguyva geeft de agent pakketten, subroutines, imports en constructors als structuur, zodat hij een wijziging kan afbakenen voordat hij de code aanraakt.
Maguyva dekt .pl, .pm, .t, .pod en .perl. Subroutines worden als functies geëxtraheerd en package-declaraties als klassen, en bij definitienamen worden de sigils ($, @, %, &, *) verwijderd, zodat variabelen en subroutines op hun kale naam doorzoekbaar zijn.
Imports komen uit use-, require- en package-statements. Methodeaanroepen in de vorm Class->new tellen als instantiëring, en bless en tie blijven bewust in de aanroepgraaf. De graaf legt ook overerving, overrides, typeverwijzingen, lees- en schrijfacties en opgeworpen exceptions vast.
Ongeveer 189 ingebouwde functies (print, open, die, warn en vergelijkbare) worden uit de aanroeprelaties gefilterd, zodat de code van de repository opvalt.
Voorbeeldprompts voor agents
- “Welke scripts gebruiken
Billing::Invoice, en welke van zijn subroutines roepen ze aan?” (dependency_search incoming)
- “Waar wordt
Report::Monthly aangemaakt, en wat gebeurt er na ->new?” (find_symbol, daarna get_task_context)
- “Zoek elk testbestand dat
Auth::Session test.” (text_pattern_search, daarna find_symbol)
Bekende beperkingen
- Klassieke Perl-methoden zijn gewone
sub-declaraties binnen een pakket, dus in structureel zoeken wordt alleen de nieuwere, specifieke method-syntaxis als methode ingedeeld. Gebruik voor oudere objectgeoriënteerde Perl de preset functions.
- Aanroepen van gefilterde ingebouwde functies verschijnen niet als randen in de graaf. Gebruik
text_pattern_search wanneer je elke aanroep van open of print nodig hebt.
Volgende stappen
Koppel een repository via de snelstart en bekijk daarna de ondersteuningsmatrix op de compatibiliteitspagina. Als het landschap naar een andere scripttaal verhuist, vergelijk dan met de Python-gids.