2014-12-17 10 views
4

컨텍스트 여기설치된 모듈을 찾을 수 없습니다

당신이 AnyEvent와 특정 이벤트 루프를 사용하는 방법을보고 싶어하는 펄 테스트 스크립트입니다 :

# file test.pl : 
#!/usr/bin/perl 

use strict; 
use warnings; 

use AnyEvent; 
use AnyEvent::Impl::EV; 

my $cv = AnyEvent->condvar; 

my $wait_one_and_a_half_seconds = AnyEvent->timer (
    after => 0.5, # after how many seconds to invoke the cb? 
    cb => sub { # the callback to invoke 
    print ("Hello from callback\n"); 
    $cv->send; 
    }, 
); 

# now wait till our time has come 
$cv->recv; 

문제

위 코드를 실행할 때 나타나는 오류는 다음과 같습니다.

$ perl test.pl 
Can't locate EV.pm in @INC (you may need to install the EV module) (@INC 
contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 
/usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 
/usr/local/lib/site_perl .) at /usr/local/lib/perl/5.18.2/AnyEvent/Impl/EV.pm 
line 28. 
BEGIN failed--compilation aborted at /usr/local/lib/perl/5.18.2/AnyEvent/Impl/EV.pm line 28. 
Compilation failed in require at test.pl line 6. 
BEGIN failed--compilation aborted at test.pl line 6. 

(210)는 그러나 나는 cpanm를 사용하여 AnyEvent 패키지를 설치하고, AnyEvent/Impl/EV.pm 파일은 @INC 경로 중 하나에 존재 :

가 어떻게이 문제를 해결 할

$ ls /usr/local/lib/perl/5.18.2/AnyEvent/Impl/ 
Cocoa.pm  Event.pm FLTK.pm IOAsync.pm Perl.pm Qt.pm UV.pm 
EventLib.pm EV.pm  Glib.pm Irssi.pm POE.pm Tk.pm 

질문?

추가 발언

오류 메시지가 EV.pm를 찾고 있습니다,하지만 난 AnyEvent/Impl/EV.pm을 예상 한 것이라고 말했습니다.
내가 쓴 use AnyEvent::Impl::EV;은 (는) 런타임에 perl is looking for EV.pm으로 바뀌 었습니다.

+0

및 소유권/권한은 그 디렉토리에 같은 점은 무엇입니까? – Sobrique

+0

@Sobrique : 권한은 괜찮습니다. 사용자는 내 계정이고 경로는 누구에게나 열려 있습니다. – LeGEC

+0

오, 아마도 잘못된 것입니다 :'#!/usr/bin/perl' -'/ usr/local'을 사용하고 있습니다. – Sobrique

답변

1

메시지가 실제로 수행해야하는지에 대한 매우 정확하고 앞으로 포인터였습니다 오류 : 별도로 설치해야하는 패키지가 있습니다.

$ sudo cpanm EV 
--> Working on EV 
Fetching http://www.cpan.org/authors/id/M/ML/MLEHMANN/EV-4.18.tar.gz ... OK 
Configuring EV-4.18 ... OK 
Building and testing EV-4.18 ... OK 
Successfully installed EV-4.18 
1 distribution installed 
그 후

은, 모든 작동합니다

$ cat test.pl 
#!/usr/bin/perl 

use strict; 
use warnings; 

use AnyEvent; 
use EV; 

my $wait_one_and_a_half_seconds = AnyEvent->timer (
    after => 0.5, # after how many seconds to invoke the cb? 
    cb => sub { # the callback to invoke 
    print ("Hello from callback\n"); 
    }, 
); 

# now wait till our time has come 
EV::run(); 

$ perl test.pl 
Hello from callback 
당신이로 실행중인 사용자
+0

글쎄, 기술적으로 당신은 _did_ 버그를 찾았습니다. 그 버그는 수정 된 것입니다. (그리고 이상하게도, 내가 설치 한 버전으로 인해 여전히 가지고있다. 말하자면,'EV.pm'은'AnyEvent :: Impl :: EV.pm'과 같지 않다. – Sobrique

+1

해결책을 받아 들여 다른 사람들이 귀하의 질문이 해결되었음을 알 수 있도록하십시오. – Borodin

+0

** sudo : cpanm : 명령을 찾을 수 없습니다. ** –

1

cpan install AnyEvent으로 이것을 재현 하려다가 동일한 오류가 발생할 수 있습니다.

'EV.pm'의 라인 28은 use EV 4.00;입니다. use EV;은 빨간색 청어입니다. 오류의 원인은 아닙니다. 이 모듈에는 명시 적으로 '사용'줄이 포함되어 있습니다 (솔직히 약간의 차이가 있습니다. 사용하고있는 것처럼 보입니다).

@INC 경로를 변경하지 않으면 작동하지 않을 것이라고 생각합니다. 소스 코드를 분해하지 않고이 모듈의 로딩이 다른 곳에서 처리된다고 가정합니다.

매뉴얼 페이지 참조 - this module gets loaded automatically as required. 따라서 처음에는 use이 필요하지 않을 것입니다.

편집 : 그냥 perl 버전을 비교했습니다. Perl 5.8.5은 동일한 동작을 보여줍니다. 내 5.20.1 설치하지 않습니다.

필자는 펄 업그레이드가 꼭 필요한 단계라고 확신하지는 않지만 시도해 볼만한 가치가 있을까요? 나는 5.20.1이 작동하는 이유를 알아 내려고 노력할 것이다. @INC의 처리와 관련이 있어야합니다.

편집 :.

"@ INC 필터 (@ INC의 서브 루틴에 의해 반환 된 서브 루틴)의 반환 값의 처리는 이전에 묶여 변수의 잘못된 취급하고 다양한 방법으로 고정하고, 기준에 $ _를 설정되었거나 typeglob로 인해 충돌이 발생할 수 있습니다. "

http://perldoc.perl.org/perl5200delta.html

나는 그 문제가 무엇인지 것 같아요.

당신이있는에서 혼자 확실히 위치 : http://www.cpantesters.org/cpan/report/d5939816-a510-11e0-bd04-22322d9f2468

에서 : http://cpansearch.perl.org/src/MLEHMANN/AnyEvent-7.08/Changes

5.29 Sun Dec 5 10:49:21 CET 2010 - convert EV backend to EV 4.00 API (so better upgrade EV too).

+0

5.18을 사용하고 있습니다. 사실, 다른 이벤트 루프를 사용합니다 (예를 들어'AnyEvnt :: Impl :: Perl'). – LeGEC

+0

예. Perldelta. 편집 됨. – Sobrique

+0

Thx thx thx thx (<- 최소 문자는 예의 바른 사람들을 특별한 사람들로 변화시킵니다.) – LeGEC

관련 문제