# Perl-tuki Maguyva-palvelussa: paketti- ja aliohjelmagraafit

Canonical source: https://maguyva.ai/fi/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 tukee Perliä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata vanhan Perl-koodin paketteja, aliohjelmia, use- ja require-tuonteja sekä konstruktoreita.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .perl, .pl, .pm, .pod, .t
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Tiimit, jotka ovat perineet Perl-palveluja, CGI-sovelluksia tai erä- ja raporttiskriptejä, jotka ovat yhä tuotannossa.
- Moduulipainotteiset koodikannat, joissa `.pm`-paketteja jakavat monet skriptit ja testitiedostot.
- Migraatio- tai alasajotyö, jossa ensimmäinen kysymys on, mitkä skriptit riippuvat mistäkin moduuleista.

## Agenttien työnkulut

- Listata kaikki skriptit ja moduulit, jotka käyttävät jaettua pakettia, ennen kuin sitä muutetaan.
- Löytää, missä luokka luodaan `->new`-kutsulla ja mitä aliohjelmia se kutsuu seuraavaksi.
- Seurata raporttia tai työtä aloitusskriptistä sen lataamien moduulien läpi.

## 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](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Jos ympäristö on siirtymässä toiseen skriptikieleen, vertaa [Python-oppaaseen](/fi/languages/python).

## Moottorin yksityiskohdat

- Perl-tuki kattaa tiedostot `.pl`, `.pm`, `.t`, `.pod` ja `.perl`. Aliohjelmat ovat funktioita ja `package`-esittelyt luokkia.
- Määrittelyjen nimistä poistetaan sigilit, `use`- ja `require`-lauseista tulee tuonteja, ja `Class->new` lasketaan ilmentymän luonniksi.
- Noin 189 sisäänrakennettua funktiota, kuten `print`, `open` ja `die`, suodatetaan pois kutsuista, mutta `bless` ja `tie` jäävät graafiin.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä paketin tai aliohjelman nimellä; sigilit poistetaan, joten hae pelkällä nimellä.
- `dependency_search`: Käytä incoming-läpikäyntiä jaettuun moduuliin nähdäksesi, mitkä skriptit ja paketit riippuvat siitä.
- `text_pattern_search`: Käytä sitä suodatettuihin sisäänrakennettuihin funktioihin, asetusavaimiin ja SQL-merkkijonoihin, jotka jäävät kutsugraafin ulkopuolelle.
