본문으로 건너뛰기
cd /languages
  • 스크립트 자산
  • 프로그래밍
  • AST 및 심볼 지원

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

Maguyva는 AST, 심볼, 그래프로 Perl을 지원하여, AI 에이전트가 레거시 Perl의 패키지, 서브루틴, use와 require 임포트, 생성자를 따라갈 수 있게 합니다.

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를 사용하세요.

다음 단계

빠른 시작으로 저장소를 연결한 다음, 호환성 페이지에서 지원 매트릭스를 확인하세요. 자산을 다른 스크립트 언어로 옮기는 중이라면 Python 가이드와 비교해 보세요.

가장 적합한 경우

  • > 프로덕션에서 여전히 돌아가는 Perl 서비스, CGI 애플리케이션, 배치·리포트 스크립트를 물려받은 팀.
  • > `.pm` 패키지가 많은 스크립트와 테스트 파일에서 공유되는 모듈 중심 코드베이스.
  • > 어떤 스크립트가 어떤 모듈에 의존하는지가 첫 질문인 마이그레이션이나 폐기 작업.

에이전트 워크플로

  • > 공유 패키지를 바꾸기 전에 그것을 쓰는 스크립트와 모듈을 모두 나열합니다.
  • > 클래스가 `->new`로 생성되는 곳과 그다음에 호출되는 서브루틴을 찾습니다.
  • > 리포트나 작업을 진입 스크립트에서부터 로드되는 모듈까지 추적합니다.

엔진 세부 정보

  • > 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 문자열에 쓰세요.