2017-10-04 1 views
2
  • 로깅 프레임 워크를 내 perl 프로젝트에 통합합니다. 여기에는 약 300 개의 Perl 파일이 있습니다.
  • 그래서 나는 warn 기능을 모듈 die을 무시했다 Logging.pm, say을 작성하고 print를 오버라이드 (override) 할 수 없기 때문에 나는 그것을 내 사용자 정의 핸들을 연결했다.
  • system/qx/exec을 통해 모든 스크립트를 실행하는 execute.pl 마스터 스크립트가 있습니다.
  • 난 그냥 execute.pl에서 Logging.pmLogging.pm의 모든 기능 system() 또는 qx() 또는 exec()을 통해 execute.pl에 의해 실행 아이 과정에서 availabe해야을 포함합니다. 실행의

예 : 난 그냥 excute.pl에서 Logging.pm을 포함하는 경우Perl의 상위 프로세스에서 하위 프로세스에 의해 상속 된 모듈

execute.pl -> system("test1.pl") -> system("test2.pl") 

는 그래서 test1.pltest2.pl가 오버라이드 (override) die/warn/say/print을 선택해야합니다.

지금까지 system/qx/exec은 OS 호출이고 Logging.pm은 하위 프로세스에서 사용할 수 없습니다. 300 파일을 편집하지 않으려 고 할 수있는 방법이 있습니까?

답변

2

하위 프로세스는 완전히 별도의 프로세스이므로 부모 프로세스가로드 한 모듈을 유지하지 않습니다.

이 문제를 해결할 가능성은 PERL5OPT 환경 변수를 설정하는 것입니다. 이 변수는 Perl 인터프리터에 대한 추가 명령 행 플래그를 보유 할 수 있습니다. 그러나 이것은 프로젝트에 포함 된 스크립트뿐만 아니라 스크립트에 의해 직접 또는 간접적으로 시작된 모든 Perl 프로세스에 영향을 미칩니다.

자동으로 use Logging으로 변경하려면 -MLoggingPERL5OPT에 추가합니다.

$ export PERL5OPT="$PERL5OPT -MLogging" 
$ ./execute.pl 

또는

$ PERL5OPT="$PERL5OPT -MLogging" ./execute.pl 

또는 execute.pl 내 :

$ENV{PERL5OPT} .= " -MLogging"; 
쉘에서
관련 문제