跳至主要內容
cd /languages
  • 腳本資產
  • 程式語言
  • AST 與符號支援

Maguyva 對 Perl 的支援:套件與副程式圖譜

Maguyva 以 AST、符號與圖譜支援 Perl,讓 AI 代理在舊有 Perl 中追蹤套件、副程式、use 與 require 匯入,以及建構子。

為什麼 Perl 資產很難安全地修改

Perl 程式碼緊湊、靈活,而且往往出自多年前就已離開的人之手。sigil 會改變名稱的意義,套件同時兼任類別,同一個模組會被許多目錄下的腳本載入。文字搜尋找得到字串,卻無法告訴代理一個腳本實際呼叫的是哪個副程式。

Maguyva 會把套件、副程式、匯入與建構子作為結構交給代理,讓它在動到程式碼之前先界定修改的範圍。

Maguyva 在 Perl 中擷取了什麼

Maguyva 涵蓋 .pl、.pm、.t、.pod 與 .perl。副程式會被擷取為函式,package 宣告會被擷取為類別,定義名稱中的 sigil($、@、%、&、*)會被移除,因此變數與副程式都能以原始名稱搜尋。

匯入來自 use、require 與 package 敘述。Class->new 形式的方法呼叫會視為實例化,bless 與 tie 則刻意保留在呼叫圖中。圖譜也會記錄繼承、覆寫、型別參照、讀寫與例外引發。

約 189 個內建函式(print、open、die、warn 等)會從呼叫關係中過濾掉,讓儲存庫自身的程式碼更加突出。

代理提示範例

  • 「哪些腳本使用了 Billing::Invoice,它們呼叫了其中哪些副程式?」(dependency_search 的 incoming 方向)
  • 「Report::Monthly 在哪裡被建構,->new 之後發生了什麼?」(先用 find_symbol,再用 get_task_context)
  • 「找出所有測試 Auth::Session 的測試檔。」(先用 text_pattern_search,再用 find_symbol)

已知限制

  • 傳統的 Perl 方法就是套件內一般的 sub 宣告,因此在結構搜尋中,只有較新的專用 method 語法會被歸類為方法。對於較舊的物件導向 Perl,請使用 functions 預設。
  • 對已過濾內建函式的呼叫不會以圖譜的邊出現。需要找出每一個 open 或 print 呼叫時,請使用 text_pattern_search。

下一步

透過快速入門連接儲存庫,然後在相容性頁面查看支援矩陣。如果這些資產正要移轉到另一種腳本語言,請對照閱讀 Python 指南。

最適合的情境

  • > 接手仍在正式環境運作的 Perl 服務、CGI 應用程式或批次與報表腳本的團隊。
  • > 以模組為主的程式碼庫,`.pm` 套件被大量腳本與測試檔共用。
  • > 移轉或汰換工作,首先要回答的是哪些腳本依賴哪些模組。

代理工作流程

  • > 在變更共用套件之前,列出所有使用它的腳本與模組。
  • > 找出某個類別在哪裡以 `->new` 建構,以及接下來呼叫了哪些副程式。
  • > 從入口腳本出發,沿著載入的模組追蹤一份報表或一個作業。

引擎細節

  • > Perl 支援涵蓋 `.pl`、`.pm`、`.t`、`.pod` 與 `.perl`。副程式是函式,`package` 宣告是類別。
  • > 定義名稱會移除 sigil,`use` 與 `require` 會成為匯入,`Class->new` 視為實例化。
  • > 約 189 個內建函式(如 `print`、`open` 與 `die`)會從呼叫中過濾掉,而 `bless` 與 `tie` 會保留在圖譜中。

實用的 MCP 進入點

  • find_symbol

    以套件或副程式名稱查找;sigil 會被移除,所以請用原始名稱搜尋。

  • dependency_search

    對共用模組使用 incoming 走訪,查看哪些腳本與套件依賴它。

  • text_pattern_search

    用於查找呼叫圖之外的已過濾內建函式、設定鍵與 SQL 字串。