我正在使用一个从我的主脚本调用函数的模块。
以下代码用于运行函数:
&{$function}();
其中$ function只是被调用函数的名称。
问题是该功能必须在同一个模块中。
我想从我的主脚本调用函数。
我该怎么做?
答案 0 :(得分:3)
sub call_function {
my $name = shift;
my $caller = caller;
no strict 'refs';
my $output = &{ $caller . "::" . $name }();
}
我们需要通过完全限定名称来调用sub。如果sub不是源自我们的包,我们需要在其前面加上正确的包名称。 caller
内置函数可以派上用场:它返回调用sub的包的名称。
答案 1 :(得分:3)
让我们假设你的主程序中有:
use Some::Module;
sub whatever { ... }
Some::Module::function(1,2,3);
在function
你想要调用的任何()子。
您可以更改该函数以再接受一个参数,该参数将引用whatever
函数。然后:
在您的主程序中:
Some::Module::function(1,2,3,\&whatever);
并在Some :: Module中:
sub function {
my ($x, $y, $z, $more_work) = @_;
...
$more_work->();
}