我之前有use Foo;
使用我编写的模块,并使用了使用Exporter.pm导出的方法和变量。
我将use
替换为require
,以便在导入模块时具有一定的灵活性。我现在得到了几十个错误,都说符号"需要明确的包名。"
我知道我可以为每个添加显式方法名称,但是有很多。
有没有办法对这些进行一次别名,以便之后我可以在没有显式包的情况下使用符号?
答案 0 :(得分:4)
“我正在从配置文件中指定的位置加载模块,因此必须在运行时完成”
好的,但不必须在运行时完成,所以你问的是错误的问题
这样做
use strict;
use warnings 'all';
use constant CONFIG_FILE => '/path/to/config_file';
my $libs;
BEGIN {
open my $fh, '<', CONFIG_FILE or die $!;
chomp($libs = <$fh>);
}
use lib $libs;
use MyLib; # MyLib.pm is in the directory specified in config_file
答案 1 :(得分:2)
您需要在编码器遇到代码之前导入符号。
您可以更快地加载符号。
use Foo;
sub moo { ... $SymbolImportedFromFoo ... }
您可以稍后编译提及。
eval(<<'__EOI__') or die $@;
use Foo;
sub moo { ... $SymbolImportedFromFoo ... }
1;
__EOI__