Perl Module :: Load使加载过程中的功能可用

时间:2018-07-20 04:04:04

标签: perl

我正在尝试编写一个简单的程序,该程序使用perl脚本作为每个项目的配置文件。我希望能够将主程序中定义的某些功能公开给配置文件。

这是到目前为止我提出的摘要。

#!/usr/bin/env perl
# loader.pl

use strict;
use warnings;
use Module::Load;

sub say_hello {
    print("hello\n");
}

load('./loadee.pl');

这是配置文件loadee.pl

# loadee.pl

use strict;
use warnings;

say_hello();

因为say_hello不在Module::Load中,所以运行此程序失败。

$ perl loader.pl 
Undefined subroutine &Module::Load::say_hello called at ./loadee.pl line 6.
Compilation failed in require at /usr/share/perl/5.22/Module/Load.pm line 70.

通过使用localModule::Load包中临时定义符号,可以在脚本主体中使用函数say_hello

#!/usr/bin/env perl

# loader2.pl

use strict;
use warnings;
use Module::Load;

sub say_hello {
    print("hello\n");
}

do {
    no warnings qw[once];
    local *Module::Load::say_hello = \&say_hello;
    load('./loadee.pl');
};

该文件在运行时会按预期产生hello

$ perl loader2.pl 
hello

加载模块时,是否有更直接或更优雅的方法使功能可用?

0 个答案:

没有答案