从模块调用main中的函数

时间:2013-06-26 08:25:21

标签: perl

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

以下代码用于运行函数:

&{$function}();

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

问题是该功能必须在同一个模块中。

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

我该怎么做?

2 个答案:

答案 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->();
}