Chuyển tới nội dung
cd /languages
  • Di sản script
  • Lập trình
  • Hỗ trợ AST và symbol

Perl trên Maguyva: đồ thị package và subroutine

Maguyva hỗ trợ Perl với AST, ký hiệu và đồ thị, để agent AI có thể lần theo package, subroutine, lệnh nhập use và require cùng constructor trong mã Perl cũ.

Vì sao di sản Perl khó thay đổi một cách an toàn

Mã Perl dày đặc, linh hoạt và thường do những người đã rời đi nhiều năm trước viết ra. Sigil thay đổi ý nghĩa của một cái tên, package đồng thời đóng vai trò lớp, và cùng một module được nạp từ script ở nhiều thư mục. Tìm kiếm văn bản tìm ra chuỗi, nhưng không cho agent biết script thực sự gọi subroutine nào.

Maguyva đưa cho agent package, subroutine, lệnh nhập và constructor dưới dạng cấu trúc, để nó khoanh vùng một thay đổi trước khi chạm vào mã.

Maguyva trích xuất gì từ Perl

Maguyva bao phủ .pl, .pm, .t, .pod và .perl. Subroutine được trích xuất thành hàm và khai báo package thành lớp, với sigil ($, @, %, &, *) được bỏ khỏi tên định nghĩa, nên biến và subroutine có thể được tìm bằng tên trần.

Quan hệ nhập đến từ câu lệnh use, require và package. Lời gọi phương thức dạng Class->new được tính là khởi tạo, còn bless và tie được giữ lại có chủ đích trong đồ thị lời gọi. Đồ thị cũng ghi lại kế thừa, ghi đè, tham chiếu kiểu, đọc và ghi, cùng việc raise ngoại lệ.

Khoảng 189 hàm dựng sẵn (print, open, die, warn và tương tự) bị lọc khỏi quan hệ lời gọi, để mã của kho nổi bật lên.

Ví dụ prompt cho agent

  • “Những script nào dùng Billing::Invoice, và chúng gọi subroutine nào của nó?” (dependency_search theo chiều vào)
  • “Report::Monthly được tạo ở đâu, và điều gì xảy ra sau ->new?” (find_symbol, sau đó get_task_context)
  • “Tìm mọi tệp kiểm thử kiểm tra Auth::Session.” (text_pattern_search, sau đó find_symbol)

Giới hạn đã biết

  • Phương thức Perl cổ điển chỉ là khai báo sub bình thường bên trong một package, nên trong tìm kiếm cấu trúc chỉ cú pháp method chuyên biệt mới hơn được phân loại là phương thức. Dùng preset functions cho Perl hướng đối tượng kiểu cũ.
  • Lời gọi tới các hàm dựng sẵn đã bị lọc không xuất hiện dưới dạng cạnh đồ thị. Dùng text_pattern_search khi bạn cần mọi lời gọi open hoặc print.

Bước tiếp theo

Kết nối một kho mã bằng hướng dẫn bắt đầu nhanh, sau đó xem ma trận hỗ trợ trên trang tương thích. Nếu phần di sản đang được chuyển sang một ngôn ngữ script khác, hãy so sánh với hướng dẫn Python.

Phù hợp nhất

  • > Các nhóm thừa hưởng dịch vụ Perl, ứng dụng CGI hoặc script batch và báo cáo vẫn đang chạy trên môi trường production.
  • > Codebase dựa trên module, nơi package `.pm` được dùng chung bởi nhiều script và tệp kiểm thử.
  • > Công việc di chuyển hoặc ngừng hoạt động, nơi câu hỏi đầu tiên là script nào phụ thuộc vào module nào.

Workflow agent

  • > Liệt kê mọi script và module dùng một package dùng chung trước khi package đó thay đổi.
  • > Tìm nơi một lớp được tạo bằng `->new` và các subroutine nó gọi sau đó.
  • > Lần theo một báo cáo hoặc job từ script khởi đầu qua các module mà nó nạp.

Chi tiết engine

  • > Hỗ trợ Perl bao phủ `.pl`, `.pm`, `.t`, `.pod` và `.perl`. Subroutine là hàm, và khai báo `package` là lớp.
  • > Sigil được bỏ khỏi tên định nghĩa, `use` và `require` trở thành lệnh nhập, và `Class->new` được tính là khởi tạo.
  • > Khoảng 189 hàm dựng sẵn như `print`, `open` và `die` bị lọc khỏi lời gọi, trong khi `bless` và `tie` vẫn ở lại trong đồ thị.

Điểm khởi đầu MCP hữu ích

  • find_symbol

    Dùng với tên package hoặc subroutine; sigil đã được bỏ, nên hãy tìm bằng tên trần.

  • dependency_search

    Dùng duyệt theo chiều vào trên một module dùng chung để thấy script và package nào phụ thuộc vào nó.

  • text_pattern_search

    Dùng cho các hàm dựng sẵn đã bị lọc, khóa cấu hình và chuỗi SQL nằm ngoài đồ thị lời gọi.