# Perl dalam Maguyva: graf pakej dan subrutin

Canonical source: https://maguyva.ai/ms/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 menyokong Perl dengan AST, simbol dan graf, supaya ejen AI boleh menjejak pakej, subrutin, import use dan require, serta pembina dalam Perl lama.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .perl, .pl, .pm, .pod, .t
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Pasukan yang mewarisi perkhidmatan Perl, aplikasi CGI atau skrip kelompok dan laporan yang masih berjalan dalam pengeluaran.
- Pangkalan kod berasaskan modul, tempat pakej `.pm` dikongsi oleh banyak skrip dan fail ujian.
- Kerja migrasi atau penamatan, dengan soalan pertama: skrip mana bergantung pada modul mana.

## Aliran kerja ejen

- Menyenaraikan setiap skrip dan modul yang menggunakan pakej kongsi sebelum pakej itu berubah.
- Mencari tempat sesuatu kelas dicipta dengan `->new` dan subrutin yang dipanggilnya selepas itu.
- Menjejak laporan atau kerja daripada skrip permulaan melalui modul yang dimuatkannya.

## Mengapa warisan Perl sukar diubah dengan selamat

Kod Perl padat, fleksibel dan selalunya ditulis oleh orang yang telah pergi bertahun-tahun lalu. Sigil mengubah makna sesuatu nama, pakej juga berfungsi sebagai kelas, dan modul yang sama dimuatkan oleh skrip dalam banyak direktori. Carian teks menemui rentetan, tetapi tidak memberitahu ejen subrutin mana yang benar-benar dipanggil oleh sesuatu skrip.

Maguyva memberikan pakej, subrutin, import dan pembina kepada ejen sebagai struktur, supaya ia boleh menetapkan skop perubahan sebelum menyentuh kod.

## Apa yang diekstrak oleh Maguyva daripada Perl

Maguyva meliputi `.pl`, `.pm`, `.t`, `.pod` dan `.perl`. Subrutin diekstrak sebagai fungsi dan pengisytiharan `package` sebagai kelas, dengan sigil (`$`, `@`, `%`, `&`, `*`) dibuang daripada nama definisi, jadi pemboleh ubah dan subrutin boleh dicari dengan nama asalnya.

Import datang daripada pernyataan `use`, `require` dan `package`. Panggilan kaedah berbentuk `Class->new` dikira sebagai penginstansian, manakala `bless` dan `tie` sengaja dikekalkan dalam graf panggilan. Graf juga merekodkan pewarisan, penggantian, rujukan jenis, bacaan dan tulisan, serta pembangkitan pengecualian.

Kira-kira 189 fungsi terbina dalam (`print`, `open`, `die`, `warn` dan seumpamanya) ditapis daripada hubungan panggilan, supaya kod repositori lebih menonjol.

## Contoh gesaan ejen

- "Skrip mana yang menggunakan `Billing::Invoice`, dan subrutin mana yang dipanggil?" (`dependency_search` arah masuk)
- "Di mana `Report::Monthly` dicipta, dan apa yang berlaku selepas `->new`?" (`find_symbol`, kemudian `get_task_context`)
- "Cari semua fail ujian yang menguji `Auth::Session`." (`text_pattern_search`, kemudian `find_symbol`)

## Had yang diketahui

- Kaedah Perl klasik hanyalah pengisytiharan `sub` biasa di dalam pakej, jadi dalam carian berstruktur hanya sintaks `method` khusus yang lebih baharu dikelaskan sebagai kaedah. Gunakan pratetap `functions` untuk Perl berorientasikan objek yang lebih lama.
- Panggilan kepada fungsi terbina dalam yang ditapis tidak muncul sebagai tepi graf. Gunakan `text_pattern_search` apabila anda memerlukan setiap panggilan `open` atau `print`.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Jika warisan ini akan dipindahkan ke bahasa skrip lain, bandingkan dengan [panduan Python](/ms/languages/python).

## Butiran enjin

- Sokongan Perl meliputi `.pl`, `.pm`, `.t`, `.pod` dan `.perl`. Subrutin ialah fungsi, dan pengisytiharan `package` ialah kelas.
- Sigil dibuang daripada nama definisi, `use` dan `require` menjadi import, dan `Class->new` dikira sebagai penginstansian.
- Kira-kira 189 fungsi terbina dalam seperti `print`, `open` dan `die` ditapis daripada panggilan, manakala `bless` dan `tie` kekal dalam graf.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama pakej atau subrutin; sigil telah dibuang, jadi cari dengan nama asal.
- `dependency_search`: Gunakan penjelajahan arah masuk pada modul kongsi untuk melihat skrip dan pakej mana yang bergantung padanya.
- `text_pattern_search`: Gunakan untuk fungsi terbina dalam yang ditapis, kunci konfigurasi dan rentetan SQL yang berada di luar graf panggilan.
