# Maguyva의 Perl 지원: 패키지와 서브루틴 그래프

Canonical source: https://maguyva.ai/ko/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`를 사용하세요.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 지원 매트릭스를 확인하세요. 자산을 다른 스크립트 언어로 옮기는 중이라면 [Python 가이드](/ko/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 문자열에 쓰세요.
