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