2014-01-29 3 views
0

모듈이 A::B::C::D::E입니다. 모듈에서 나는 몇 가지 상수를 정의 :어떻게 정수 이름을 줄일 수 있습니까?

use constant { 
    PERSON => 'person', 
    EMPLOYEE => 'employees', 
}; 

내가 할 :

our @EXPORT_OK qw/PERSON EMPLOYEE /; 

나는 다른 스크립트에서 모듈을 use 내가 할 경우 상수 일 :

A::B::C::D::E::PERSON 

어떻게 내가 할 수있는 PERSON을 사용하고 전체 모듈 이름을 포함 할 필요가 없습니까? 내 스크립트에 PERSON을 가져 오지만 작동하지 않습니다.

+0

'E.pm' 파일을 더 표시하십시오. – toolic

답변

8

@EXPORT_OK은 모듈을 "Exporter"에 올바르게 연결했다고 가정하고 "내보내기에 사용 가능"으로 표시합니다. 기본적으로 내보내지지 않습니다. 스크립트에서

는 모듈에서 해당 상수를 가져
use A::B::C::D::E qw/PERSON EMPLOYEE /; 

을한다.

업데이트 : 모듈을 Exporter에 제대로 연결하지 않은 것 같습니다.

use Exporter 5.57 'import'; # v5.57 introduced an exportable import method 

또는

use Exporter(); 
our @ISA = qw(Exporter); # also include any other base classes you have 

내가 패키지 수출의 서브 클래스를하지 않는 첫 번째 접근 방식을 선호 : 그렇게하려면, 당신도 A/B/C/D/E.pm에 포함.

+0

예, 제가하고있는 일입니다. 그리고 그것은 작동하지 않습니다. 내가 사용하는 A :: B :: C :: D :: E qw /.../'의 일부로 선언 한 함수는 아무런 문제없이 잘 작동합니다. 상수에 대해서만 "... bareword not allowed ..."오류가 발생합니다. – Jim

+2

@Jim : Exporter가 필요합니까? @ISA = qw (Exporter);'당신의'E.pm' 파일에? – toolic

2

our @EXPORT_OK 뒤에 =가 누락되었습니다.

our @EXPORT_OK = qw(PERSON EMPLOYEE); 
+2

예,하지만 누락 된'='은 구문 오류를 일으킬 수 있습니다. 따라서 실제 문제보다는 오타가 될 수 있습니다. – cjm

관련 문제