我正在使用从我的主脚本调用函数的模块。从模块调用主函数
下面的代码用于运行功能:
&{$function}();
其中$函数只是调用函数的名称。
问题是该函数必须位于同一个模块中。
我想从我的主脚本中调用函数。
我该怎么做?
我正在使用从我的主脚本调用函数的模块。从模块调用主函数
下面的代码用于运行功能:
&{$function}();
其中$函数只是调用函数的名称。
问题是该函数必须位于同一个模块中。
我想从我的主脚本中调用函数。
我该怎么做?
sub call_function {
my $name = shift;
my $caller = caller;
no strict 'refs';
my $output = &{ $caller . "::" . $name }();
}
我们需要用完全限定名称来调用子。如果该子文件不是源自我们的软件包,我们需要用正确的软件包名称加前缀。内建函数caller
派上用场:它返回我们的子文件被调用的包的名称。
看起来很完美。谢谢。 –
虽然在技术上的工作,我不会说这是很好的解决方案。禁用严格,取决于功能的特定名称。发送CODEREF更清洁,更强大。 – 2013-06-26 09:05:31
让我们在你的主程序假设你有:
use Some::Module;
sub whatever { ... }
Some::Module::function(1,2,3);
而在function
要拨打任何()子。
您可以更改该功能以再采用一个参数,该参数将参考whatever
函数。然后:
在你的主程序:
Some::Module::function(1,2,3,\&whatever);
,并在一些::模块:
sub function {
my ($x, $y, $z, $more_work) = @_;
...
$more_work->();
}
有没有这样的代码编译,甚至?我的意思是 - '严格使用;'应该使它不可能,而且你使用的是严格模式,对吧? – 2013-06-26 09:04:36
...不。测试:p –
听起来像是真正的背对背设计,从模块的脚本中调用函数... – plusplus