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 /; 

импортировать эти константы из модуля.

Обновление: Похоже, что вы не подключили свой модуль к Экспортеру правильно. Чтобы сделать это, нужно включить в A/B/C/D/E.pm либо:

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 

Я предпочитаю первый подход, который не делает пакет подкласс экспортера.

+0

Да, это то, что я делаю. И это не сработает. Функция, которую я объявила как часть 'use A :: B :: C :: D :: E qw /.../' Я работаю без проблем просто отлично. Только для констант я получаю сообщение «... bareword not allowed ...» error – Jim

+2

@Jim: Вам потребовался Exporter; наш @ISA = qw (Экспортер); 'в вашем файле' E.pm'? – toolic

2

Вам не хватает = после our @EXPORT_OK.

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

Да, но отсутствующий '=' приведет к синтаксической ошибке, так что это почти наверняка просто опечатка в его сообщении, а не его актуальная проблема. – cjm

Смежные вопросы