Perl에서 모듈을 연결하기 위해 두 가지 주요 연산자 — use와 require를 사용합니다.
use — 컴파일 단계에서 모듈을 연결합니다. Perl 파일을 읽을 때 즉시 실행되며, 모듈을 스코프에 로드하고 import 메서드를 호출합니다(있는 경우).
require — 런타임 동안 모듈을 로드합니다.
require $some_module;).예:
use MyModule; # compile-time; calls import require 'MyModule.pm'; # run-time; no import
변수 이름의 모듈로
use를 사용할 수 있습니까? 예:use $module_name;
답변: 아닙니다. use 연산자는 컴파일 시점에 정적으로 알려진 모듈 이름을 요구하며, require는 변수 이름에 적합합니다.
예:
my $module = 'Some::Plugin'; require $module; $module->import();
이야기
프로젝트는 동적으로 연결된 플러그인이 많은 경우에 작성되었습니다. 한 개발자가 실수로 'use $plugin'을 사용했는데, 이로 인해 컴파일 오류가 발생했습니다. 나중에 로드가 require를 통해서만 가능하다는 것이 밝혀졌고, 그 후 import가 호출됩니다.
이야기
대규모 Perl 서비스에서 일부 라이브러리는 'require'를 통해 수행되었고, import 호출이 없었습니다. 예측된 변수와 함수가 네임스페이스에 가져와지지 않아 코드는 undefined subroutine 오류로 종료되었습니다.
이야기
개발자가 'use'를 통해 함수 내에서 큰 코드 블록을 연결하려고 시도했으나 모듈이 필요할 때만 로드될 것이라고 생각했으나, 실제로 모듈은 시작 시점에 식별되어 불필요한 메모리 사용이 발생하였습니다.