2014-01-15 3 views
0

내 모듈에서 일부 상수를 내보냈습니다. 나의 스크립트에서 나는 내 스크립트에서 모조 :: 로더Mojo :: Loader에서 Mojolicious 내보내기가 작동하지 않습니다.

내 모듈

use constant FALSE  => 0; 
use constant TRUE   => 1; 

our @EXPORT = qw(FALSE TRUE); 

를 사용하여 내 모듈을로드하고 있습니다.

Mojo::Loader->new->load($my_module_name); 

내 스크립트에서 내 모듈을 사용할 수 있었지만 내 보낸 내 상수는 내 스크립트에서 액세스 할 수 없었습니다. 사용 절을 사용하여 모듈을로드하는 경우. 내 보낸 상수를 사용할 수있었습니다.

이 문제를 해결하고 내 스크립트에 상수를 가져 오는 방법을 알려주세요.

감사합니다.

+1

상수를 내보낼 모듈 코드의 관련 부분을 추가하십시오. – simbabque

+0

@simbabque 업데이트 된 질문 확인 – PMat

+0

Mojo 모듈을 사용하는 이유가 있습니까? – simbabque

답변

1

Mojo :: Loader 코드를 살펴본 결과 가져올 수없는 것으로 나타났습니다. require (문자열 평가)이지만 use은 포함하지 않습니다. 출처의 빠른 grep은 import이 무엇인지 밝혀 내기 때문에 Your::Module->import 번으로 전화해야합니다. 소스 코드와 견적의 관련 부분에

Here's a link :

여기에 무슨 재미있는 일이 있습니다
sub load { 
    my ($self, $module) = @_; 

    # Check module name 
    return 1 if !$module || $module !~ /^\w(?:[\w:']*\w)?$/; 

    # Load 
    return undef if $module->can('new') || eval "require $module; 1"; 

    # Exists 
    return 1 if [email protected] =~ /^Can't locate \[email protected]{[class_to_path $module]}\E in \@INC/; 

    # Real error 
    return Mojo::Exception->new([email protected]); 
} 

. use foo 인 경우 가져 오기는 상수와 함께 작동합니다. 그러나

use foo; 
print 'True: ', TRUE; 

:

require foo; 
foo->import; 
print 'True: ', TRUE; 

이 경고 Bareword "TRUE" not allowed while "strict subs" in use를 생성합니다. 그래서 우리는 TRUE()을 베어 어그처럼 보이게 만듭니다. 상수는 결국 하위 다. 이제 작동 할 것입니다. Mojo::Loader->load('foo')도 마찬가지입니다.

블록을 require 및 으로 감싸는 경우 괄호를 생략 할 수 있습니다.

따라서 상수를 내보내려면 Mojo :: Loader를 계속 사용하려면 상수를 호출 할 위치에 괄호를 추가하십시오.

+0

또한 my_module-> import();를 시도했습니다. 그러나 그것은 도움이되지 못했습니다. 여전히 상수에 접근 할 수 없습니다. – PMat

+0

'load' 이후? – simbabque

+0

예로드 후 가져 왔습니다. – PMat

관련 문제