# Perl v Maguyva: grafy balíčků a podprogramů

Canonical source: https://maguyva.ai/cs/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 podporuje Perl s AST, symboly a grafem, takže AI agenti sledují balíčky, podprogramy, importy use a require a konstruktory ve starším Perlu.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .perl, .pl, .pm, .pod, .t
- Skutečné parsování AST pro vyhledávání citlivé na syntaxi a strukturální kontext.
- Pojmenované symboly napájejí sémantické vyhledávání a křížové odkazy. Navigace v grafu je k dispozici, když je povolena extrakce vztahů.
- Tento jazyk přispívá symboly a vztahy do vyhledávání využívajícího graf; podporované typy hran se liší podle jeho nativních konstrukcí.
- K dispozici je parsování AST i extrakce symbolů.

## Nejlépe se hodí pro

- Týmy, které zdědily služby v Perlu, aplikace CGI nebo dávkové a reportovací skripty, jež stále běží v produkci.
- Kódové základny postavené na modulech, kde balíčky `.pm` sdílí mnoho skriptů a testovacích souborů.
- Migrace nebo vyřazování z provozu, kde první otázka zní, které skripty závisejí na kterých modulech.

## Workflow agentů

- Vypsat všechny skripty a moduly, které používají sdílený balíček, než se změní.
- Najít, kde se třída vytváří přes `->new` a které podprogramy pak volá.
- Sledovat report nebo úlohu od vstupního skriptu přes moduly, které načítá.

## Proč se perlové dědictví těžko bezpečně mění

Kód v Perlu je hutný, pružný a často ho psali lidé, kteří odešli před lety. Sigily mění význam názvu, balíčky slouží zároveň jako třídy a tentýž modul načítají skripty z mnoha adresářů. Textové vyhledávání najde řetězce, ale agentovi neřekne, který podprogram skript skutečně volá.

Maguyva dá agentovi balíčky, podprogramy, importy a konstruktory jako strukturu, aby mohl změnu ohraničit dřív, než sáhne do kódu.

## Co Maguyva v Perlu extrahuje

Maguyva pokrývá `.pl`, `.pm`, `.t`, `.pod` a `.perl`. Podprogramy se extrahují jako funkce a deklarace `package` jako třídy; z názvů definic se odstraňují sigily (`$`, `@`, `%`, `&`, `*`), takže proměnné i podprogramy lze vyhledat podle holého názvu.

Importy vznikají z příkazů `use`, `require` a `package`. Volání metod ve tvaru `Class->new` se počítají jako vytvoření instance a `bless` a `tie` zůstávají v grafu volání záměrně. Graf zaznamenává také dědičnost, přepisy, odkazy na typy, čtení a zápisy a vyvolání výjimek.

Přibližně 189 vestavěných funkcí (`print`, `open`, `die`, `warn` a podobné) se z vazeb volání odfiltruje, aby vynikl kód repozitáře.

## Ukázkové prompty pro agenty

- „Které skripty používají `Billing::Invoice` a které jeho podprogramy volají?“ (`dependency_search` incoming)
- „Kde se vytváří `Report::Monthly` a co se stane po `->new`?“ (`find_symbol`, pak `get_task_context`)
- „Najdi všechny testovací soubory, které prověřují `Auth::Session`.“ (`text_pattern_search`, pak `find_symbol`)

## Známá omezení

- Klasické metody v Perlu jsou běžné deklarace `sub` uvnitř balíčku, takže ve strukturním vyhledávání se jako metoda klasifikuje jen novější vyhrazená syntaxe `method`. Pro starší objektově orientovaný Perl použijte preset `functions`.
- Volání odfiltrovaných vestavěných funkcí se v grafu neobjeví jako hrany. Když potřebujete každé volání `open` nebo `print`, použijte `text_pattern_search`.

## Další kroky

Připojte repozitář podle [rychlého startu](/cs/docs/quickstart) a pak si prohlédněte matici podpory na [stránce kompatibility](/cs/docs/compatibility). Pokud se dědictví stěhuje do jiného skriptovacího jazyka, porovnejte s [průvodcem jazykem Python](/cs/languages/python).

## Podrobnosti enginu

- Podpora Perlu pokrývá `.pl`, `.pm`, `.t`, `.pod` a `.perl`. Podprogramy jsou funkce a deklarace `package` jsou třídy.
- Z názvů definic se odstraňují sigily, `use` a `require` se stávají importy a `Class->new` se počítá jako vytvoření instance.
- Přibližně 189 vestavěných funkcí, jako `print`, `open` a `die`, se z volání odfiltruje, zatímco `bless` a `tie` v grafu zůstávají.

## Užitečné vstupní body MCP

- `find_symbol`: Použijte s názvem balíčku nebo podprogramu; sigily se odstraňují, takže hledejte podle holého názvu.
- `dependency_search`: Použijte procházení incoming na sdíleném modulu a uvidíte, které skripty a balíčky na něm závisejí.
- `text_pattern_search`: Použijte pro odfiltrované vestavěné funkce, konfigurační klíče a řetězce SQL, které graf volání vynechává.
