# Perl di Maguyva: graf paket dan subrutin

Canonical source: https://maguyva.ai/id/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 mendukung Perl dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri paket, subrutin, impor use dan require, serta konstruktor dalam Perl lama.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .perl, .pl, .pm, .pod, .t
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Tim yang mewarisi layanan Perl, aplikasi CGI, atau skrip batch dan laporan yang masih berjalan di produksi.
- Basis kode berbasis modul, tempat paket `.pm` dipakai bersama oleh banyak skrip dan berkas uji.
- Pekerjaan migrasi atau penghentian, dengan pertanyaan pertama: skrip mana yang bergantung pada modul mana.

## Workflow agent

- Mendaftar setiap skrip dan modul yang menggunakan paket bersama sebelum paket itu berubah.
- Menemukan tempat sebuah kelas dibuat dengan `->new` dan subrutin yang dipanggilnya kemudian.
- Menelusuri sebuah laporan atau job dari skrip awal melalui modul yang dimuatnya.

## Mengapa warisan Perl sulit diubah dengan aman

Kode Perl padat, fleksibel, dan sering ditulis oleh orang yang sudah pergi bertahun-tahun lalu. Sigil mengubah makna sebuah nama, paket juga berfungsi sebagai kelas, dan modul yang sama dimuat oleh skrip di banyak direktori. Pencarian teks menemukan string, tetapi tidak memberi tahu agen subrutin mana yang benar-benar dipanggil sebuah skrip.

Maguyva memberi agen paket, subrutin, impor, dan konstruktor sebagai struktur, sehingga ia dapat membatasi cakupan perubahan sebelum menyentuh kode.

## Apa yang diekstrak Maguyva dari Perl

Maguyva mencakup `.pl`, `.pm`, `.t`, `.pod`, dan `.perl`. Subrutin diekstrak sebagai fungsi dan deklarasi `package` sebagai kelas, dengan sigil (`$`, `@`, `%`, `&`, `*`) dibuang dari nama definisi, sehingga variabel dan subrutin dapat dicari dengan nama polosnya.

Impor berasal dari pernyataan `use`, `require`, dan `package`. Panggilan metode berbentuk `Class->new` dihitung sebagai instansiasi, sedangkan `bless` dan `tie` sengaja dipertahankan dalam graf panggilan. Graf juga mencatat pewarisan, override, referensi tipe, pembacaan dan penulisan, serta pemunculan eksepsi.

Sekitar 189 fungsi bawaan (`print`, `open`, `die`, `warn`, dan sejenisnya) difilter dari relasi panggilan, agar kode repositori menonjol.

## Contoh prompt agen

- "Skrip mana yang menggunakan `Billing::Invoice`, dan subrutin mana yang mereka panggil?" (`dependency_search` arah masuk)
- "Di mana `Report::Monthly` dibuat, dan apa yang terjadi setelah `->new`?" (`find_symbol`, lalu `get_task_context`)
- "Temukan semua berkas uji yang menguji `Auth::Session`." (`text_pattern_search`, lalu `find_symbol`)

## Batasan yang diketahui

- Metode Perl klasik hanyalah deklarasi `sub` biasa di dalam paket, sehingga dalam pencarian struktural hanya sintaks `method` khusus yang lebih baru yang diklasifikasikan sebagai metode. Gunakan preset `functions` untuk Perl berorientasi objek yang lebih lama.
- Panggilan ke fungsi bawaan yang difilter tidak muncul sebagai edge graf. Gunakan `text_pattern_search` saat Anda membutuhkan setiap panggilan `open` atau `print`.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Jika warisan ini akan dipindahkan ke bahasa skrip lain, bandingkan dengan [panduan Python](/id/languages/python).

## Detail engine

- Dukungan Perl mencakup `.pl`, `.pm`, `.t`, `.pod`, dan `.perl`. Subrutin adalah fungsi, dan deklarasi `package` adalah kelas.
- Sigil dibuang dari nama definisi, `use` dan `require` menjadi impor, dan `Class->new` dihitung sebagai instansiasi.
- Sekitar 189 fungsi bawaan seperti `print`, `open`, dan `die` difilter dari panggilan, sedangkan `bless` dan `tie` tetap ada di graf.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama paket atau subrutin; sigil sudah dibuang, jadi carilah dengan nama polos.
- `dependency_search`: Gunakan penelusuran arah masuk pada modul bersama untuk melihat skrip dan paket mana yang bergantung padanya.
- `text_pattern_search`: Gunakan untuk fungsi bawaan yang difilter, kunci konfigurasi, dan string SQL yang berada di luar graf panggilan.
