프로그래밍백엔드 개발자

Perl에서 모듈을 조직하고 가져오는 방법은 무엇입니까? @INC 시스템과 use/require는 어떻게 작동합니까? 자체 모듈 생성 및 연결 예를 제공합니다.

Hintsage AI 어시스턴트로 면접 통과

답변

Perl에서는 모듈(패키지)을 사용하여 코드를 조직하며, 이는 .pm 확장자를 가진 별도의 파일로 저장됩니다.

  • 모듈을 연결하려면 use(컴파일 단계에서)와 require(실행 단계에서)를 사용합니다.
  • Perl은 모듈을 찾을 때 특별한 배열인 @INC를 사용합니다. 이는 Perl이 모듈을 찾는 디렉토리 목록입니다.

모듈 예제:

Foo.pm

package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;

연결 및 사용:

use lib '.'; # 현재 폴더를 @INC에 추가 use Foo; Foo::say_hello(); # 출력: Hello from Foo!

주요 차이점:

  • use는 스크립트 실행 시작 시 모듈을 가져오고, 자동으로 import 메서드를 호출합니다(일반적으로 모듈에 사용됨).
  • require는 첫 번째 호출 시에만 모듈을 로드합니다.

함정이 있는 질문

userequire의 차이는 무엇입니까? 어떤 연산자를 언제 사용해야 합니까?

답변:

  • use는 컴파일 단계에서 작동하며, 자동으로 import를 호출합니다(대개 모듈에 사용됨).
  • require는 실행 중에 작동하고, 모듈 이름이 실행 전에는 알 수 없거나 항상 연결할 필요가 없을 때 사용됩니다.

주제에 대한 미숙지로 인한 실제 오류 사례


이야기

큰 프로젝트에서 require를 통해 자체 라이브러리를 연결했지만, 내부에서 내보낸 함수를 사용하는 것을 잊었습니다. 사용된 함수는 내보내지지 않았기 때문에 requireimport를 호출하지 않아 문제가 발생했습니다. 결과적으로 기호가 가져와지지 않아 함수를 명시적으로 호출해야 했습니다.


이야기

모듈을 별도의 폴더로 옮길 때, use lib를 통해 폴더 경로를 추가하거나 @INC 변수를 변경하는 것을 잊었습니다. 모듈을 찾을 수 없어 스크립트가 오류로 종료되었고, 파일이 프로젝트에 맞는 곳에 있음에도 불구하고 발생한 문제였습니다.


이야기

오래된 애플리케이션에서 모듈 이름을 소문자로 설정했지만, 대문자로 use로 연결했습니다: use foo; 대신 use Foo;. Perl은 모듈을 찾지 못해 애플리케이션의 핵심 부분이 제대로 작동하지 않았습니다.