# Perl у Maguyva: графи пакетів і підпрограм

Canonical source: https://maguyva.ai/uk/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 підтримує Perl з AST, символами та графом, щоб ШІ-агенти відстежували пакети, підпрограми, імпорти use і require та конструктори в успадкованому Perl.

## Знімок підтримки

- Рівень: Підтримка 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`.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Якщо спадщина переїжджає на іншу скриптову мову, порівняйте з [посібником із мови Python](/uk/languages/python).

## Деталі рушія

- Підтримка Perl охоплює `.pl`, `.pm`, `.t`, `.pod` і `.perl`. Підпрограми є функціями, а оголошення `package` — класами.
- З назв визначень вилучаються сигіли, `use` і `require` стають імпортами, а `Class->new` вважається створенням екземпляра.
- Близько 189 вбудованих функцій, як-от `print`, `open` і `die`, відфільтровуються з викликів, а `bless` і `tie` лишаються в графі.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте з назвою пакета чи підпрограми; сигіли вилучаються, тож шукайте за голою назвою.
- `dependency_search`: Використовуйте обхід incoming для спільного модуля, щоб побачити, які скрипти й пакети від нього залежать.
- `text_pattern_search`: Використовуйте для відфільтрованих вбудованих функцій, ключів конфігурації та SQL-рядків, яких граф викликів не охоплює.
