2012-12-19 12 views
12

lib 경로에 $ var 변수를 사용하고 싶습니다. 나는이 작업을 수행 할 때 lib 경로에서 변수를 어떻게 사용합니까?

use lib "$var/lib/";

my $var = "/home/usr/bibfile;"

그러나 그것은 오류가 발생합니다.

use lib "/home/usr/bibfile/lib/"; 대신 use lib "$var/lib/";을 사용하고 싶습니다.

어떻게 변수를 할당하여 lib 모듈 설정에서 사용할 수 있습니까?

+0

가 아닌 표준 디렉토리에 일부 라이브러리를 가지고 있고 당신이 그것을 사용하고 싶어 : 당신의 lib 디렉토리는 원래 스크립트에 어딘가에 상대적있는 경우

, 당신은 표준 모듈 FindBin를 사용할 수 있습니까? – xhudik

+0

예. 라이브러리는 비표준 디렉토리에 있습니다. – Sourcecode

답변

20

첫째, 간단한 구문 오류가 있습니다. 첫 줄 이후에 ;이 누락되었습니다. my 변수는 use lib에서 정상적으로 작동해야합니다. 모든 use 지침이 BEGIN 블록에서 실행되기 때문에 너무 BEGIN 블록에서 초기화를 둘 필요가 있으므로

그러나, 당신의 변수는, 당신은 use 실행하는 순간에 초기화되지 않은 것입니다. 당신이 달성하려고하는 일에 대해

$VAR1 = [ 
     '/home/usr/bibfile/lib/', 
     # ... more ... 
    ]; 
+0

@ikegami, lib는 발견 된 경우 대상의 표준 버전과 아치 서브 디렉토리도 검사하고 추가합니다. –

1

확실하지,하지만 FindBin::libs의 작업처럼 보인다 :

my $var; 
BEGIN { $var = "/home/usr/bibfile"; } 
use lib "$var/lib/"; 

use Data::Dumper; 
print Dumper \@INC; 

은 부여,

my $var; 
BEGIN { $var = "/home/usr/bibfile" }; 
use FindBin::libs "Bin=$var", "base=lib"; 
+0

나는'use lib "$ var/lib /";''lib 사용하기 "/ home/usr/bibfile/lib /";'를 사용하고 싶습니다. 변수를 할당하여 lib 모듈 설정에 사용할 수있게하려면 어떻게해야합니까? – Sourcecode

+0

좋아, 귀하의 특정 필요에 맞게 답변을 편집 :) 그러나 하드 코드 된 절대 경로를 사용하지 말고 현재 스크립트 (FindBin :: libs의 목적)에 상대적인 것을 사용하지 않는 것이 좋습니다. – creaktive

+1

@creaktive 답변 지금부터는 질문자와 같은 오류가 발생합니다. 수락 된 답변의 해결책을 사용하여이 문제를 해결할 수 있습니다. – MattLBeck

-3

당신은 할 수없는 use 때문에 지시문은 컴파일 타임에 평가되고 다른 변수는 런타임에 평가됩니다.

# $Bin from FindBin is the directory of the original script 
use FindBin; 
use lib "$FindBin::Bin/path/to/bib"; 
use MyModule; 
관련 문제