Miksi Perl-ympäristöjä on vaikea muuttaa turvallisesti
Perl-koodi on tiivistä, joustavaa ja usein vuosia sitten lähteneiden ihmisten kirjoittamaa. Sigilit muuttavat nimen merkitystä, paketit toimivat myös luokkina, ja samaa moduulia lataavat skriptit monista hakemistoista. Tekstihaku löytää merkkijonot, mutta ei kerro agentille, mitä aliohjelmaa skripti todella kutsuu.
Maguyva antaa agentille paketit, aliohjelmat, tuonnit ja konstruktorit rakenteena, jotta se voi rajata muutoksen ennen kuin koskee koodiin.
Mitä Maguyva poimii Perlistä
Maguyva kattaa tiedostot .pl, .pm, .t, .pod ja .perl. Aliohjelmat poimitaan funktioina ja package-esittelyt luokkina, ja määrittelyjen nimistä poistetaan sigilit ($, @, %, &, *), joten muuttujia ja aliohjelmia voi hakea pelkillä nimillä.
Tuonnit muodostetaan lauseista use, require ja package. Muotoa Class->new olevat metodikutsut lasketaan ilmentymän luonniksi, ja bless ja tie säilytetään kutsugraafissa tarkoituksella. Graafi tallentaa myös periytymisen, ylikirjoitukset, tyyppiviittaukset, luvut ja kirjoitukset sekä poikkeusten nostamisen.
Noin 189 sisäänrakennettua funktiota (print, open, die, warn ja vastaavat) suodatetaan pois kutsusuhteista, jotta repositorion oma koodi erottuu.
Esimerkkikehotteita agenteille
- “Mitkä skriptit käyttävät pakettia
Billing::Invoice, ja mitä sen aliohjelmia ne kutsuvat?” (dependency_search incoming)
- “Missä
Report::Monthly luodaan, ja mitä tapahtuu kutsun ->new jälkeen?” (find_symbol, sitten get_task_context)
- “Etsi kaikki testitiedostot, jotka testaavat pakettia
Auth::Session.” (text_pattern_search, sitten find_symbol)
Tunnetut rajoitukset
- Perinteiset Perl-metodit ovat tavallisia
sub-esittelyjä paketin sisällä, joten rakenteellisessa haussa metodiksi luokitellaan vain uudempi erillinen method-syntaksi. Käytä vanhemmalle olio-Perlille esiasetusta functions.
- Suodatettujen sisäänrakennettujen funktioiden kutsut eivät näy graafin kaarina. Käytä työkalua
text_pattern_search, kun tarvitset jokaisen open- tai print-kutsun.
Seuraavat vaiheet
Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Jos ympäristö on siirtymässä toiseen skriptikieleen, vertaa Python-oppaaseen.