之前可能已经提到过,但我不确定要搜索什么。问题是我正在处理一个深度为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();
有没有办法通过它的最后一个包名来访问常量?
答案 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;