本文へスキップ
cd /languages
  • スクリプト資産
  • プログラミング
  • AST・シンボル対応

MaguyvaのPerl対応: パッケージとサブルーチンのグラフ

MaguyvaはAST、シンボル、グラフでPerlに対応しています。AIエージェントはレガシーPerlのパッケージ、サブルーチン、use/requireのインポート、コンストラクターをたどれます。

Perlの資産を安全に変更するのが難しい理由

Perlのコードは密度が高く、柔軟で、何年も前に去った人が書いたものであることがよくあります。シジルは名前の意味を変え、パッケージはクラスを兼ね、同じモジュールが多くのディレクトリのスクリプトから読み込まれます。テキスト検索は文字列を見つけますが、スクリプトが実際にどのサブルーチンを呼び出しているかはエージェントに教えてくれません。

Maguyvaはパッケージ、サブルーチン、インポート、コンストラクターを構造としてエージェントに渡すため、コードに触れる前に変更の範囲を見定められます。

MaguyvaがPerlで抽出するもの

Maguyvaは .pl、.pm、.t、.pod、.perl に対応しています。サブルーチンは関数として、package 宣言はクラスとして抽出されます。定義名からはシジル($、@、%、&、*)が取り除かれるため、変数とサブルーチンをそのままの名前で検索できます。

インポートは 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` 宣言はクラスになります。
  • > 定義名からはシジルが取り除かれ、`use` と `require` はインポートになり、`Class->new` はインスタンス化として扱われます。
  • > `print`、`open`、`die` など約189個の組み込み関数は呼び出しから除外されますが、`bless` と `tie` はグラフに残ります。

役立つMCPエントリーポイント

  • find_symbol

    パッケージやサブルーチンの名前で使ってください。シジルは取り除かれるため、そのままの名前で検索します。

  • dependency_search

    共有モジュールに対してincomingのトラバーサルを使い、どのスクリプトやパッケージが依存しているかを確認してください。

  • text_pattern_search

    コールグラフから外れる、除外された組み込み関数、設定キー、SQL文字列に使ってください。