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

Canonical source: https://maguyva.ai/ja/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はAST、シンボル、グラフでPerlに対応しています。AIエージェントはレガシーPerlのパッケージ、サブルーチン、use/requireのインポート、コンストラクターをたどれます。

## 対応状況スナップショット

- 対応レベル: AST・シンボル対応
- プログラミング
- 拡張子: .perl, .pl, .pm, .pod, .t
- 構文を考慮した検索と構造コンテキストのための実際のAST解析。
- 名前付きシンボルはセマンティック検索と相互参照に利用されます。関係抽出が有効な場合は、グラフナビゲーションも利用できます。
- この言語は、グラフを考慮した検索にシンボルと関係情報を提供します。対応するエッジの種類は、その言語固有の構文要素によって異なります。
- AST解析とシンボル抽出の両方に対応しています。

## 最適な用途

- 本番で今も動くPerlのサービス、CGIアプリケーション、バッチやレポートのスクリプトを引き継いだチーム。
- `.pm` パッケージが多くのスクリプトやテストファイルで共有される、モジュール中心のコードベース。
- どのスクリプトがどのモジュールに依存しているかが最初の問いになる、移行や廃止の作業。

## エージェントワークフロー

- 共有パッケージを変更する前に、それを使うスクリプトとモジュールをすべて一覧にする。
- クラスが `->new` で生成される場所と、その次に呼び出されるサブルーチンを見つける。
- レポートやジョブを、エントリースクリプトから読み込まれるモジュールまで追跡する。

## 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` を使ってください。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で対応マトリクスを確認してください。別のスクリプト言語への移行を考えている場合は、[Pythonガイド](/ja/languages/python)と比較してください。

## エンジンの詳細

- 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文字列に使ってください。
