2009-10-01 3 views
1

필자는 일부 기능을 실행하는 데 사용하는 perl 모듈 파일과 테스트 스크립트 pl을 가지고 있으며, browsing through the use libthis previous question here... 후에도이 작업을 수행하는 방법을 여전히 모른다.Perl이 테스트 디렉토리에서만 모듈을 실행하도록하려면 어떻게해야합니까?

기본적으로 모듈 파일이 들어있는 프로덕션 디렉터리가 있고 동일한 모듈과 테스트 스크립트 파일이 들어있는 테스트 디렉터리 파일이 있습니다. 스크립트 파일을 실행할 때마다 자동으로 디렉토리의 모듈을 호출합니다. @INC을 인쇄하면 생산 디렉토리가 호스팅 된 것처럼 보입니다. 따라서 나는

no lib qw(prod_dir); 

를 사용하여 제거하려고 밖으로 인쇄하는 동안 @INC

은 아마 이것을 알고 ... 디렉토리가 어떻게 든 스크립트가 여전히 다른 모듈 것을 촉구, 이상이없는 것을 보여줍니다 정말 바보처럼 들리지만, 누군가가 내가 여기에서 빛을 볼 수 있도록 도울 수 있기를 바랍니다 :) 감사합니다.

+0

'BEGIN {@ INC = 'test'}'가 작동 할 수 있습니다. –

답변

6

require d 또는 use 모듈을받은 후 %INC을 확인하여 그 출처를 확인하십시오. 예를 들어

"::"가 있음을

use Data::Dumper; 
print $INC{'Data/Dumper.pm'}."\n"; 

참고 "/"당신은 ".pm으로"를 추가합니다. 그것은 당신에게 단서를 줄 수 있습니다.

현재 디렉토리 (".")는 일반적으로 @INC의 항목입니다. 그러나 첫 번째 단계는 모듈이로드 된 디렉토리를 찾는 것입니다.

기억해야 할 또 다른 점은 @INC의 디렉토리가 순서대로 검색된다는 것입니다. use lib은 해당 목록 앞에 추가되므로 첫 번째로 검색된 디렉토리가되므로 적절한 디렉토리를 추가하기 만하면됩니다.

2

당신이하려는 일에 대해 더 많이 말할 수 있습니까? 어떻게하고 싶습니까? 이 것들은 표준 Perl 배포 구조에 있습니까? 표준 배포 구조를 사용하지 않는 경우, 디렉토리 목록을 표시하여 사물이 어디에 있는지 알 수 있습니까? 모듈을로드하는 데 사용하는 코드도 포함시킬 수 있습니까? 세부 사항을 모두 모으면 원래 질문을 업데이트하십시오.

일반적으로 빌드 러너를 통해 테스트를 실행하면 자동으로 오른쪽 @INC이 설정됩니다.

% perl -Mblib t/test.t 

어떤 사람들은 prove과 같은 일을 :

내 분포 하나 개의 테스트를 실행하려면

, 내 모듈의 개발 버전이 빌드 ​​라이브러리를 찾기 위해 blib 모듈을 사용합니다.

기본 배포 설정을 사용하지 않는 경우 사용하는 것이 좋습니다. 도구와 최상의 기술이이 도구에 의존합니다.

모듈과 테스트 파일이 같은 디렉토리에 있다면 @INC에 현재 디렉토리를 PERL5LIB으로 추가하려고 했습니까?

+0

@Brian - 네, mod perl이고 우리는 우리가 사용하고있는 나머지 pm 파일의 나머지를 저장하는 디렉토리를 가지고 있습니다. 나는 순환 의존성이 있거나이 문제를 일으키는 어떤 일이 일어나고 있다고 생각한다. ( – melaos

관련 문제