# Perl sa Maguyva: mga package at subroutine graph

Canonical source: https://maguyva.ai/fil/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).

Sinusuportahan ng Maguyva ang Perl gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga package, subroutine, use at require na import, at mga constructor sa legacy na Perl.

## Snapshot ng support

- Antas: Support para sa AST at mga simbolo
- Programming
- Mga extension: .perl, .pl, .pm, .pod, .t
- Tunay na AST parsing para sa syntax-aware search at structural context.
- Pinapagana ng mga named symbol ang semantic lookup at cross-reference. Available ang graph navigation kapag naka-enable ang pagkuha ng mga ugnayan.
- Nag-aambag ang wikang ito ng mga simbolo at ugnayan sa graph-aware search; nag-iiba ang mga sinusuportahang uri ng edge ayon sa mga native construct nito.
- Available ang AST parsing at symbol extraction.

## Pinakabagay

- Mga team na nagmana ng Perl service, CGI app o batch at report script na tumatakbo pa rin sa production.
- Mga module-based na codebase kung saan ang mga `.pm` package ay ginagamit ng maraming script at test file.
- Migration o decommission na trabaho kung saan ang unang tanong ay kung aling mga script ang umaasa sa aling mga module.

## Mga workflow ng agent

- Ilista ang bawat script at module na gumagamit ng isang shared package bago ito baguhin.
- Hanapin kung saan ginagawa ang isang class gamit ang `->new` at kung aling mga subroutine ang tinatawag nito pagkatapos.
- I-trace ang isang report o job mula sa entry script nito sa mga module na nilo-load nito.

## Bakit mahirap baguhin nang ligtas ang legacy na Perl

Siksik at flexible ang Perl code, at madalas isinulat ng mga taong ilang taon nang wala. Binabago ng mga sigil ang kahulugan ng isang pangalan, nagsisilbi ring class ang mga package, at iisang module ang nilo-load ng mga script sa maraming directory. Nahahanap ng text search ang mga string, pero hindi nito sinasabi sa agent kung aling subroutine talaga ang tinatawag ng isang script.

Ibinibigay ng Maguyva sa agent ang mga package, subroutine, import at constructor bilang structure, para ma-scope nito ang isang pagbabago bago hawakan ang code.

## Ano ang kinukuha ng Maguyva mula sa Perl

Sakop ng Maguyva ang `.pl`, `.pm`, `.t`, `.pod` at `.perl`. Kinukuha ang mga subroutine bilang function at ang mga `package` declaration bilang class, at tinatanggal ang mga sigil (`$`, `@`, `%`, `&`, `*`) sa mga definition name, kaya mahahanap ang mga variable at subroutine gamit ang payak nilang pangalan.

Galing ang mga import sa mga `use`, `require` at `package` statement. Itinuturing na instantiation ang mga method call na may anyong `Class->new`, habang sadyang pinapanatili ang `bless` at `tie` sa call graph. Itinatala rin ng graph ang inheritance, override, type reference, read at write, at pag-raise ng exception.

Mga 189 built-in function (`print`, `open`, `die`, `warn` at mga katulad nito) ang nifi-filter mula sa mga call relationship, para lumitaw ang code ng repository.

## Mga halimbawang agent prompt

- "Aling mga script ang gumagamit ng `Billing::Invoice`, at aling mga subroutine nito ang tinatawag nila?" (`dependency_search` na incoming)
- "Saan ginagawa ang `Report::Monthly`, at ano ang nangyayari pagkatapos ng `->new`?" (`find_symbol`, tapos `get_task_context`)
- "Hanapin ang lahat ng test file na nagte-test sa `Auth::Session`." (`text_pattern_search`, tapos `find_symbol`)

## Mga kilalang limitasyon

- Payak na `sub` declaration lang sa loob ng package ang mga klasikong Perl method, kaya sa structural search, ang mas bagong dedikadong `method` syntax lang ang itinuturing na method. Gamitin ang `functions` preset para sa mas lumang object-oriented na Perl.
- Hindi lumalabas bilang graph edge ang mga call sa mga na-filter na built-in. Gamitin ang `text_pattern_search` kapag kailangan mo ang bawat `open` o `print` call.

## Mga susunod na hakbang

Mag-connect ng repository gamit ang [quickstart](/fil/docs/quickstart), tapos tingnan ang support matrix sa [compatibility page](/fil/docs/compatibility). Kung ililipat ang legacy code sa ibang scripting language, ikumpara sa [gabay sa Python](/fil/languages/python).

## Mga detalye ng engine

- Sakop ng Perl support ang `.pl`, `.pm`, `.t`, `.pod` at `.perl`. Mga function ang mga subroutine, at mga class ang mga `package` declaration.
- Tinatanggal ang mga sigil sa mga definition name, nagiging import ang `use` at `require`, at itinuturing na instantiation ang `Class->new`.
- Mga 189 built-in tulad ng `print`, `open` at `die` ang nifi-filter mula sa mga call, habang nananatili sa graph ang `bless` at `tie`.

## Mga kapaki-pakinabang na MCP entry point

- `find_symbol`: Gamitin kasama ang pangalan ng package o subroutine; tinatanggal ang mga sigil, kaya payak na pangalan ang i-search.
- `dependency_search`: Gumamit ng incoming traversal sa isang shared module para makita kung aling mga script at package ang umaasa rito.
- `text_pattern_search`: Gamitin para sa mga na-filter na built-in, config key at SQL string na nasa labas ng call graph.
