perlmod를는 BEGIN
및 END
일반적으로 사용되는 참으로 그 특별한 블록 만 설명합니다. 그들은 단지 CV, LIFO 또는 FIFO의 배열입니다. 이러한 블록은 코드가 실행될 때 소스 파일의 위치와 관계없이 별도의 타이밍을 허용합니다. 따라서 코드 섹션을 함께 유지할 수 있지만 서로 다른 시간에 실행됩니다 (PHASES
).
CHECK 모듈 초기화 (사용 패키지) 후 고정 된 순서에 컴파일러 스위트 O (-MO=C...
)를 실행하기 위해 초기에 첨가하고, 메인 프로그램하기 전에 실행 컨텍스트가 수를 저장합니다. 이것은 실행 시간 (after)과 컴파일 시간 (before)을 구분합니다. perl -c
가 CHECK 후에 중지됩니다.
저는 컴파일러의 관리자이기 때문에 CHECK와 -MO =를 광범위하게 사용합니다. 내 모듈 compile()
메서드는 O에 의해 CHECK 블록 내에 호출됩니다. Od (디버깅 O) 나는 compile
메서드를 CHECK가 아니라 나중에 INIT라고 부르므로 디버거가이 메서드를 호출합니다. 디버거는 기본적으로 CHECK 블록을 실행하지 않으므로 $DB::single=1
으로 강제 실행하거나 Od을 사용해야합니다.
UNITCHECK은 나중에 미세 입자 모듈 컴파일 및로드에 추가되었습니다. .pmc
파일.
나는 지금까지 그것을 사용한 적이 없습니다. 그것은 또한 런타임에 발생할 수 있으므로 런타임에로드 된 모듈의 유형 검사에 사용할 수 있습니다.
INIT을 추가하여 별도의 클래스 초기화를 허용했습니다.
거의 사용하지 않지만 편리합니다.
이제'require Module; module-> import (@stuff)'를하고 싶지 않은 이유를 기억합니다. 이미 디버깅 할 수있는 테스트 스크립트 세트가 있었기 때문에 모든 파일에서'모듈 사용 '문을 편집하고 싶지 않았기 때문입니다. – mob
컴파일 타임 코드를 디버깅하기 위해 이러한 왜곡을 수행 할 필요가 없습니다. 소스에 $ DB :: single = 1을 넣으면 디버거는 프로그램을 처리하는 단계와 관계없이 그 시점에서 중단됩니다. (http://perldoc.perl.org/perldebug.html#Debugging 참조) -compile-time-statements) –
감사합니다. Brian! 그거 알아두면 좋을거야. – mob