2009-11-25 6 views
1
sh-3.2# perl -v 

This is perl, v5.8.9 built for darwin-2level 
... 


sh-3.2# perl 2348.pl 
Can't locate HTTP/Cookies.pm in @INC (@INC contains: /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level /opt/local/lib/perl5/site_perl/5.8.9 /opt/local/lib/perl5/site_perl /opt/local/lib/perl5/vendor_perl/5.8.9/darwin-2level /opt/local/lib/perl5/vendor_perl/5.8.9 /opt/local/lib/perl5/vendor_perl /opt/local/lib/perl5/5.8.9/darwin-2level /opt/local/lib/perl5/5.8.9 .) at 2348.pl line 24. 
BEGIN failed--compilation aborted at 2348.pl line 24. 


sh-3.2# find/| grep -i "Cookies\.pm" 
/System/Library/Perl/Extras/5.10.0/HTTP/Cookies.pm 
/System/Library/Perl/Extras/5.8.9/HTTP/Cookies.pm 
/usr/local/ActivePerl-5.10/lib/HTTP/Cookies.pm 

이 문제를 해결하는 방법은 무엇입니까? @INC를 편집해야한다는 것을 이해하지만 어디입니까? :)어떻게 Perl이 내 모듈을 찾을 수 있습니까?

+0

당신입니다 (브라이언 d 개의 포이에서 제안 업데이트)? –

+0

저는 "맥"이라고 생각합니다. 실제로 그 대답에는 영향을 미치지 않지만 말입니다. 그것은 당신이 다르게 얻을 것 인 같은 대답이다. –

+0

죄송 합니다만, MAC 대신 "# $! %"라고 말 했어야합니다. –

답변

3

난 당신이

perl -I /System/Library/Perl/Extras/5.8.9 -e'use HTTP::Cookies;' 
+0

동일한 것 : ( sh-3.2 # perl -I /System/Library/Perl/Extras/5.8.9 -e'use HTTP :: Cookies; ' sh-3.2 # perl 2348.pl 찾을 수 없습니다. @INC의 HTTP/Cookies.pm (@INC는 다음을 포함합니다 : /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level /opt/local/lib/perl5/site_perl/5.8.9/opt/local// opt/local/lib/perl5/vendor_perl/opt/lib/perl5/site_perl/local/lib/perl5/5.8.9/darwin-2level /opt/local/lib/perl5/5.8.9.) 2348.pl 줄 24. BEGIN 실패 - 컴파일이 2348.pl 줄 24에서 중단되었습니다. sh -3.2 # – yoble

+4

@yoble : 스크립트를 호출 할 때'I ...'인수를 사용해야한다는 의미입니다. 그가 준 명령은 단순히 모듈을 사용하려고 시도하고 종료합니다 (오류가 발생하면포함 경로가 작동하지 않는다는 것을 말하십시오). 'perl -I/System/Library/Perl/Extras/5.8.9 2348.pl'도 그렇습니다. – Ether

0

@ INC는 단순히 많은 "경로"와 같은, 당신이 포함 참조하는 배열입니다 시도해야한다 생각한다.

do '/usr/local/ActivePerl-5.10/lib/HTTP/Cookies.pm' 

을 시도하고 HTTP를 사용 :: 쿠키가 잘 작동합니다.

편집 : 당신은 또한 @ INC

당신이 '/ 옵션/지역'디렉토리에 본사를 둔 맞춤 컴파일 펄을 사용하고있는 것 같습니다
$myincludes = join(", ",@INC); 
print $myincludes; 
+1

그래, 나는 이걸 좀 서둘 렀어. –

+0

sh-3.2 # do '/usr/local/ActivePerl-5.10/lib/HTTP/Cookies.pm ' sh : 예상치 못한 토큰'do'근처에서 구문 오류가 발생했습니다. – yoble

+1

'do'는 쉘 명령이 아닌 perl 함수입니다. –

0

속에있는 것을 확인할 수 있습니다. 조사 할 두 가지 사항 : Perl을 어디에서 실행하고 있습니까? /usr/bin에 다른 문자가 있습니까? 나는 당신이 발견 한 라이브러리와 당신이 사용하고있는 사용자 정의 라이브러리를 따라 시스템 설치가되어 있다고 추측하고있다.이 경우에는 cpan 유틸리티를 사용하여 사용자 정의 위치에 원하는 모듈을 설치하고 싶을 수도있다.

+0

/opt/local은 macports가 해당 항목을 설치하는 곳입니다 (http://macports.org 참조). '/ opt/local/bin'이'$ PATH'에서'/ usr/bin' 앞에 있지 않으면'/ opt/lang/bin/cpan HTTP :: Cookies'를 호출하십시오. – Ether

+0

오,이 얼마나 엉망입니다. 저자가 Apple 소프트웨어를 사용하고 있다고 지적했다면 도움이되었을 것입니다. –

+0

이것은 Mac OS X에서 문제가되지 않습니다. 모든 플랫폼에서 동일한 문제입니다. –

5

비표준 위치에 HTTP::Cookies을 설치했습니다. cpan HTTP::Cookies 또는 /opt/lang/bin/cpan HTTP::Cookies으로 다시 설치할 수 있습니다.

또한 What's the easiest way to install a missing Perl module?

+0

Ether은 cpan을 설치 한 perl을 shebang 행에 포함해야하므로 cpan을 전체 경로로 호출 할 것을 권장합니다. CPAN.pm 설정은 기본 @INC가 아닌 다른 것을 지정했을 수 있습니다. –

0

당신은 할 수 없습니다 "편집"@INC를 참조하십시오. 바이너리에 잠겨 있습니다. (그렇습니다. @INC의 값을 500 NUL로 채우는 일부 Windows Installer가 있으므로 값을 핫 - 패치 할 수 있지만 거기에 가지 마십시오.)

따라서 @INC에 새로운 값을 지정하는 유일한 방법은 Perl 배포판을 다시 컴파일하는 것입니다. 스크립트에서

+2

이것은 단순히 거짓입니다. @INC가 변경된 수십 개의 스크립트를 작성했습니다. –

+0

아니야. @INC가 바이너리에 바인딩되어 있으므로 @INC를 변경하지 않았습니다. –

+2

명확히하기 위해 : Randal은'perl' 실행 파일이 처음에 사용한 @INC 경로를 "구성"할 방법이 없다고 말하고 있습니다. 바이너리에 내장되어 있습니다. 그러나 명령 줄 스위치 또는 해당 실행에 고유 한 Perl 코드를 사용하여 런타임에 다른 곳에서 보려는 실행 파일을 알 수 있습니다. 하지만 코드를 실행할 때마다이 기술을 해당 호출에 대해서만 사용할 수 있으므로이 작업을 수행해야합니다. –

2

당신은 편집 할 수 있습니다 @INC :

BEGIN { 
    unshift(@INC, '/System/Library/Perl/Extras/5.8.9/'); 
    use HTTP::Cookies; 
} 

당신은 MAC에있어

+2

그 경로가 앞쪽에 있고 그가 Perl 5.8.9를 실행하고 있음을 알 수 있습니다. HTTP :: Cookies는 순수한 Perl이므로 작동하지만 다른 버전의 라이브러리 경로를 보면 바이너리 호환되지 않는 모듈이로드 될 수 있습니다. –

관련 문제