Langkau ke kandungan
cd /languages
  • Warisan skrip
  • Pengaturcaraan
  • Sokongan AST dan simbol

Perl dalam Maguyva: graf pakej dan subrutin

Maguyva menyokong Perl dengan AST, simbol dan graf, supaya ejen AI boleh menjejak pakej, subrutin, import use dan require, serta pembina dalam Perl lama.

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, kemudian semak matriks sokongan di halaman keserasian. Jika warisan ini akan dipindahkan ke bahasa skrip lain, bandingkan dengan panduan Python.

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.

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.