【问题标题】:How can I shorten a constant name?如何缩短常量名称?
【发布时间】:2014-01-29 20:09:21
【问题描述】:

我有一个模块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,但它不起作用。

【问题讨论】:

    标签: perl module constants perl-module


    【解决方案1】:

    @EXPORT_OK 仅将事物标记为“可导出”(假设您已将模块正确连接到 Exporter)。默认情况下它不会导出它们。

    在你的脚本中,做

    use A::B::C::D::E qw / PERSON EMPLOYEE /;
    

    从你的模块中导入这些常量。

    更新:听起来您没有正确地将模块连接到 Exporter。为此,您可以在 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
    

    我更喜欢第一种方法,它不会使您的包成为 Exporter 的子类。

    【讨论】:

    • 是的,这就是我正在做的。它不起作用。我已经声明为use A::B::C::D::E qw /.../ 的一部分的函数我可以正常工作。仅对于我得到“...不允许裸词...”错误的常量
    【解决方案2】:

    您在our @EXPORT_OK 之后缺少=

    our @EXPORT_OK = qw( PERSON EMPLOYEE );
    

    【讨论】:

    • 是的,但是缺少= 会导致语法错误,因此几乎可以肯定这只是他的帖子中的拼写错误,而不是他的实际问题。
    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多