使用来自所需模块的导出变量并使用严格

时间:2015-12-14 20:49:26

标签: perl

我之前有use Foo;使用我编写的模块,并使用了使用Exporter.pm导出的方法和变量。

我将use替换为require,以便在导入模块时具有一定的灵活性。我现在得到了几十个错误,都说符号"需要明确的包名。"

我知道我可以为每个添加显式方法名称,但是有很多。

有没有办法对这些进行一次别名,以便之后我可以在没有显式包的情况下使用符号?

2 个答案:

答案 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__
相关问题