【问题标题】:How to call method with object from another perl file如何使用另一个 perl 文件中的对象调用方法
【发布时间】:2020-08-21 04:29:20
【问题描述】:

我知道如何使用静态方法(它适用于 hello worlds):

require $pathToFile;
{
no strict 'refs';
&{$methodName}();
}

但它不适用于其他更复杂的方法,我有如下错误:

在 (...) 处调用的未定义子例程 &FunctionRunner::funcTest

我尝试了类似的方法:

require $pathToFile;
{
no strict 'refs';
$pathToFile->{$methodName}->();
}

而且这些功能都不起作用:

未定义的子程序 &main:: 在 (...) 调用

  1. 当我想使用 $pathToFile 文件中的 $methodName 时为什么要使用 main??

我发现用 eval 调用了这个方法,所以我尝试了:

my $testResult = eval { $pathToFile->{$methodName}->() };

或

{
no strict 'refs';
my $method = $pathToFile->{$methodName};
my $testResult = eval( "main::$method()" );
}

两次尝试都没有错误,只是没有做任何事情。 脚本结束,方法没有调用。

  1. 为什么这不起作用,在这种情况下如何从另一个脚本调用方法?

【问题讨论】:

  • 我不确定你在问什么。如果您有一种可行的方法(在您的第一个示例中),那么为什么需要另一种方法?
  • 对不起,这仅适用于静态方法,这是一个原因。

标签: perl


【解决方案1】:

require 会将 .pm 添加到 bareword,但如果您使用变量,则必须执行类似 require "$x.pm"; $x->foo() 的操作。阅读更多perldoc -f require

p.pl:

use lib './';

my $x = 'P';

require "$x.pm";
my $y = 'foo';

$x->$y();

下午:

package P;

sub foo {
    print 'HELLO FROM foo()!';
}

1

【讨论】:

  • 谢谢,这意味着我必须从 .pl 文件中调用方法,但它也可以。
猜你喜欢
  • 2022-12-09
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2013-05-22
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多