1

我正在使用一个从我的主脚本调用函数的模块。

以下代码用于运行函数:

&{$function}();

其中 $function 只是被调用函数的名称。

问题是函数必须在同一个模块中。

我想从我的主脚本中调用函数。

我怎样才能做到这一点 ?

4

2 回答 2

3

让我们假设在你的主程序中你有:

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->();
}
于 2013-06-26T08:36:17.370 回答
3
sub call_function {
  my $name = shift;
  my $caller = caller;

  no strict 'refs';
  my $output = &{ $caller . "::" . $name }();
}

我们需要通过完全限定的名称来调用 sub。如果 sub 不是源自我们的包,我们需要在它前面加上正确的包名。caller内置函数可以派上用场:它返回调用我们的 sub 的包的名称。

于 2013-06-26T08:35:18.697 回答