处理perl中的深层包名及其导出的常量和子例程

时间:2016-03-06 19:04:09

标签: perl

之前可能已经提到过,但我不确定要搜索什么。问题是我正在处理一个深度为4个目录并且名称相当长的软件包。在包中有一些我想在main中使用的导出常量,但我不想使用他们的完全限定名,我也不想使用他们的本地名称(最后的部分:)。例如。

use strict;
use warnings;
use Vendor::FirstPackage::SecondPackage::ThirdPackage qw(const_a);

# this is works, but I want to include the last package
my $x = const_a;

# this throws bareword error
my $y = ThirdPackage::const_a;

# this throws undefined subroutine 
my $z = ThirdPackage::const_a();

有没有办法通过它的最后一个包名来访问常量?

3 个答案:

答案 0 :(得分:7)

use Package::Alias 'ThirdPackage' => 'Vendor::FirstPackage::SecondPackage::ThirdPackage';

但我建议只使用完全限定名称。

答案 1 :(得分:3)

您可以在主脚本中创建这样的包:

package ThirdPackage;
use strict;
use Vendor::FirstPackage::SecondPackage::ThirdPackage qw(const_a);

然后,您应该可以const_a作为ThirdPackage::const_a访问。如果您将该包放在主脚本的开头,那么主代码应该用package main;分隔

答案 2 :(得分:1)

您可以像这样使用Module::Load

use strict;
use warnings;
use Module::Load qw(load_remote);
BEGIN {
    load_remote 'ThirdPackage', 'Vendor::FirstPackage::SecondPackage::ThirdPackage', qw(const_a);
}

my $x = ThirdPackage::const_a;