# Perl w Maguyva: grafy pakietów i podprogramów

Canonical source: https://maguyva.ai/pl/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 obsługuje Perla przez AST, symbole i graf, dzięki czemu agenci AI śledzą pakiety, podprogramy, importy use i require oraz konstruktory w starszym Perlu.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .perl, .pl, .pm, .pod, .t
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Zespoły, które odziedziczyły usługi w Perlu, aplikacje CGI albo skrypty wsadowe i raportowe wciąż działające na produkcji.
- Bazy kodu oparte na modułach, w których pakiety `.pm` są współdzielone przez wiele skryptów i plików testowych.
- Prace migracyjne lub wygaszające, w których pierwsze pytanie brzmi: które skrypty zależą od których modułów.

## Workflow agentów

- Wypisać wszystkie skrypty i moduły używające współdzielonego pakietu przed jego zmianą.
- Znaleźć miejsce, w którym klasa jest tworzona przez `->new`, i podprogramy wywoływane potem.
- Prześledzić raport lub zadanie od skryptu wejściowego przez ładowane moduły.

## Dlaczego zasoby w Perlu trudno bezpiecznie zmieniać

Kod w Perlu jest zwięzły, elastyczny i często napisany przez ludzi, którzy odeszli lata temu. Sigile zmieniają znaczenie nazwy, pakiety pełnią też rolę klas, a ten sam moduł jest ładowany przez skrypty w wielu katalogach. Wyszukiwanie tekstowe znajduje ciągi znaków, ale nie mówi agentowi, który podprogram skrypt faktycznie wywołuje.

Maguyva daje agentowi pakiety, podprogramy, importy i konstruktory jako strukturę, aby mógł określić zakres zmiany przed dotknięciem kodu.

## Co Maguyva wyodrębnia w Perlu

Maguyva obejmuje `.pl`, `.pm`, `.t`, `.pod` i `.perl`. Podprogramy są wyodrębniane jako funkcje, a deklaracje `package` jako klasy; z nazw definicji usuwane są sigile (`$`, `@`, `%`, `&`, `*`), więc zmienne i podprogramy można wyszukiwać po samej nazwie.

Importy pochodzą z instrukcji `use`, `require` i `package`. Wywołania metod w formie `Class->new` liczą się jako tworzenie instancji, a `bless` i `tie` są celowo zachowywane w grafie wywołań. Graf zapisuje też dziedziczenie, nadpisania, odwołania do typów, odczyty i zapisy oraz zgłaszanie wyjątków.

Około 189 funkcji wbudowanych (`print`, `open`, `die`, `warn` i podobne) jest filtrowanych z relacji wywołań, aby wyróżnić kod repozytorium.

## Przykładowe prompty dla agentów

- „Które skrypty używają `Billing::Invoice` i które z jego podprogramów wywołują?” (`dependency_search` incoming)
- „Gdzie tworzony jest `Report::Monthly` i co dzieje się po `->new`?” (`find_symbol`, potem `get_task_context`)
- „Znajdź wszystkie pliki testowe, które sprawdzają `Auth::Session`.” (`text_pattern_search`, potem `find_symbol`)

## Znane ograniczenia

- Klasyczne metody w Perlu to zwykłe deklaracje `sub` wewnątrz pakietu, więc w wyszukiwaniu strukturalnym jako metoda klasyfikowana jest tylko nowsza, dedykowana składnia `method`. Dla starszego obiektowego Perla użyj presetu `functions`.
- Wywołania odfiltrowanych funkcji wbudowanych nie pojawiają się jako krawędzie grafu. Gdy potrzebujesz każdego wywołania `open` lub `print`, użyj `text_pattern_search`.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). Jeśli zasoby przechodzą na inny język skryptowy, porównaj z [przewodnikiem po języku Python](/pl/languages/python).

## Szczegóły silnika

- Obsługa Perla obejmuje `.pl`, `.pm`, `.t`, `.pod` i `.perl`. Podprogramy są funkcjami, a deklaracje `package` klasami.
- Sigile są usuwane z nazw definicji, `use` i `require` stają się importami, a `Class->new` liczy się jako tworzenie instancji.
- Około 189 funkcji wbudowanych, takich jak `print`, `open` i `die`, jest filtrowanych z wywołań, natomiast `bless` i `tie` pozostają w grafie.

## Przydatne punkty wejścia MCP

- `find_symbol`: Używaj go z nazwą pakietu lub podprogramu; sigile są usuwane, więc szukaj po samej nazwie.
- `dependency_search`: Użyj przejścia incoming na współdzielonym module, aby zobaczyć, które skrypty i pakiety od niego zależą.
- `text_pattern_search`: Używaj go do odfiltrowanych funkcji wbudowanych, kluczy konfiguracji i ciągów SQL, których graf wywołań nie obejmuje.
