我正在尝试编写一个简单的程序,该程序使用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.
通过使用local
在Module::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
加载模块时,是否有更直接或更优雅的方法使功能可用?