문제

현재 PP (Par Packer)를 사용하여 클라이언트가 CPAN을 사용하지 않으면 서 머신에 복사 할 수 있도록 몇 개의 PL 스크립트를 포장하고 "그냥 작동"할 수 있습니다.

불행히도, 파 패커는 깊은 종속성에 대해서는 작동하지 않습니다. 예를 들어, 스크립트는 chi :: driver :: 파일을 가져 오지만 명시 적으로 log :: any :: 어댑터 :: null what chi :: driver :: 파일이 요구합니다. PAR 은이 종속성을 선택하지 않으며 생성 된 스크립트를 실행하면 다음 오류 메시지가 중단됩니다.

Can't locate Log/Any/Adapter/Null.pm in @INC (@INC contains: CODE(0x874aab8) /tmp/par-apache/cache-7b4508ab92efb43271da1629e8eb654c1572cc55/inc/lib /tmp/par-apache/cache-7b4508ab92efb43271da1629e8eb654c1572cc55/inc CODE(0x87e8f54) CODE(0x87e9194)) at (eval 215) line 3.
Compilation failed in require at CHI/Driver/File.pm line 11.
BEGIN failed--compilation aborted at CHI/Driver/File.pm line 11.

내 작업은 "log :: any :: 어댑터 :: null"을 명시 적으로 가져 오는 것입니다. 그러나 더 나은 방법이 있어야합니다. 아마도 이것은 파 패커가있는 버그입니까? 최신 버전 (0.994)을 설치했습니다.

도움이 되었습니까?

해결책

독립형 바이너리 (PP의 기본 모드)와 달리 독립형 스크립트를 원한다면 -P 옵션을 추가하십시오. 그래도 나는 그것에 대해 조언 할 것입니다. 가장 테스트가 가장 적은 작동 모드입니다.

또한 PAR :: Packer는 깊은 종속성에 대해 작동합니다. 귀하의 질문의 주제는 약간 소박합니다. 실제로 PAR :: Packer는 종속성 자체를 실제로 확인하지 않지만 이것을 모듈 :: scandeps로 위임합니다. 이제 Module :: Scandeps는 종속성 스캔에 대한 휴리스틱 접근법이며 동적 의존성 로딩으로 추악한 퍼지로 파손될 수 있습니다. (즉, 실행 시간에 모듈 이름을 생성 한 다음 평가에 사용).

실제로, 당신이 보면 로그의 소스 :: any (Chi :: Driver :: File에서 사용하면 모듈의 동적로드를 사용하는 것을 신속하게 알 수 있습니다. 이것이 :: 어댑터 :: null 모듈이 선택되지 않는 이유입니다.

일반적으로 우리는 Module :: Scandeps에 특별한 사례를 추가하여 이러한 문제를 해결하여 저자가 모든 종류의 정적 분석을 물리 치는 것이 좋습니다. 고정 된 버전을 얻을 때까지 모듈 :: scandeps, -C 또는 -X 옵션을 PP에 사용하여 정적 분석에만 의존하는 대신 종속성 해상도를 사용하여 프로그램의 컴파일 또는 실행을 할 수 있습니다. 증강 된 모듈 :: scandeps에는 버전이 0.95이며 하루 안에 CPAN에서 사용할 수 있어야합니다.

다른 팁

글쎄, 당신은 읽었습니까? 선적 서류 비치? 종속성을 포함하는 여러 명령 줄 옵션과 모듈을 수동으로 강제로 포함하도록하는 옵션조차 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top