2014-01-29 85 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

是的,這是我正在做的。它不起作用。我已經聲明爲'使用A :: B :: C :: D :: E qw /.../'的一部分的函數,我沒有問題就沒有問題。只有對於常量,我會得到「......裸字不允許......」錯誤 – Jim

+2

@Jim:您是否需要導出程序;我們的@ISA = qw(出口商);'在'E.pm'文件中? – toolic

2

您在our @EXPORT_OK之後缺少=

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

是的,但缺少'='會導致語法錯誤,所以在他的帖子中幾乎肯定是一個錯字,而不是他的實際問題。 – cjm