【发布时间】:2020-08-21 04:29:20
【问题描述】:
我知道如何使用静态方法(它适用于 hello worlds):
require $pathToFile;
{
no strict 'refs';
&{$methodName}();
}
但它不适用于其他更复杂的方法,我有如下错误:
在 (...) 处调用的未定义子例程 &FunctionRunner::funcTest
我尝试了类似的方法:
require $pathToFile;
{
no strict 'refs';
$pathToFile->{$methodName}->();
}
而且这些功能都不起作用:
未定义的子程序 &main:: 在 (...) 调用
- 当我想使用 $pathToFile 文件中的 $methodName 时为什么要使用 main??
我发现用 eval 调用了这个方法,所以我尝试了:
my $testResult = eval { $pathToFile->{$methodName}->() };
或
{
no strict 'refs';
my $method = $pathToFile->{$methodName};
my $testResult = eval( "main::$method()" );
}
两次尝试都没有错误,只是没有做任何事情。 脚本结束,方法没有调用。
- 为什么这不起作用,在这种情况下如何从另一个脚本调用方法?
【问题讨论】:
-
我不确定你在问什么。如果您有一种可行的方法(在您的第一个示例中),那么为什么需要另一种方法?
-
对不起,这仅适用于静态方法,这是一个原因。
标签: perl