use lib
에 대한 상대 경로를 찾는 데 문제가 있습니다. 다음은 내가하려는 일의 예입니다.모듈을 기준으로 경로에 lib를 사용하십시오.
myscript.pl
이라는 스크립트가 포함 된 foo
이라는 디렉터리 호출이 있습니다.
use lib 'bar';
use Mod1;
내가 Mod1.pm
다른 모듈을 사용할 때까지이 잘 작동 foo/bar/asdf/Mod2.pm
: 나는 라인을 넣어 myscript.pl
의 상단에 있도록 myscript.pl
는 이름의 모듈 Mod1.pm
bar
라는 하위 디렉토리에 사용합니다. 의 맨 위에 use lib 'asdf'
을 입력하면 실행중인 디렉토리에 상대적인 검색을 수행하므로 작동하지 않습니다 myscript.pl
. 그래서 약간의 검색을했고, FindBin
을 발견하고, Mod1.pm에이 라인을 추가하는 시도 : FindBin
내가 실행하고 스크립트 (myscript.pl
가)에있는 디렉토리를 발견하기 때문에
use FindBin;
use lib "$FindBin::Bin/asdf";
이이 중 하나가 작동하지 않았다 FindBin
(이 경우 Mod1.pm
)을 사용하는 파일이 아닙니다. 그래서 내 질문은 Mod1.pm
이있는 스크립트가 어디에 있든 상관없이 Mod1.pm
이있는 곳을 찾아서 Mod2.pm
을 찾을 수있는 방법이 있습니까?
편집 : 내 상황의 자세한 설명은 귀하의 의견의 일부를 해결하기 위해 : 나는 저장소에 코드 일하고 있어요, 모든 CPAN 라이브러리 저장소의 디렉토리에 설치해야
. 즉, use lib
에는 절대 경로가있을 수 없습니다. 내 프로젝트에는 중앙 모듈 "Mod1.pm"이 있습니다. use
저장소의 여러 디렉토리에있는 상당량의 CPAN 모듈이 있습니다. use lib
문은 모두 use lib '../../foo/bar/asdf'
형식이므로 스크립트를 실행하는 곳과 관계없이 찾을 수 있습니다. 그러나이 문제는 Mod1.pm을 사용하는 스크립트를 실행할 수있는 곳을 제한합니다. 또 다른 짜증나는 부작용은 내가 정확히 perl -c Mod1.pm
Mod1pm에 대한 편집 내용을 확실하게 할 수 없다는 것입니다. Mod1.pm이있는 곳이 아닌 적절한 장소에서 실행하고 있지 않는 한 제정신입니다. 오, 이미 지저분한 코드가있는 프로젝트에 참여하는 즐거움 ... 또 다른 불쾌한 부작용은 내가 문제를 해결하기 위해 제안하는 CPAN 모듈을 사용할 수 없다는 것입니다. 그걸 찾아야 해.
Mod1.pm – chrsblck
에서 'lib/bar'를 사용하십시오. @chrsblck 이는 foo에서 스크립트를 실행하는 경우에만 작동합니다. 내가 어디에서 실행하는지 또는 스크립트가있는 곳과 관계없이 작동하도록합니다. – Lorkenpeist
그러면 절대 경로를 사용해 보거나이 디렉토리를'$ PERL5LIB'에 추가 할 수 있습니다. – chrsblck