Как вызвать метод с объектом из другого perl файла - PullRequest
0 голосов
/ 06 мая 2020

Я знаю, как использовать метод stati c (он работает в hello worlds):

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

Но он не работает с другими, более сложными методами, у меня ошибка типа:

Неопределенная подпрограмма и FunctionRunner :: funcTest вызывается в (...)

Я пробовал что-то вроде:

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

И ни одна из функций не работает:

Неопределенная подпрограмма & main :: вызывается в (...)

  1. Почему main, когда я хотел использовать $ methodName из файла $ pathToFile ??

Я обнаружил, что вызывает эти методы с помощью eval, поэтому я попробовал:

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

или

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

, и в обеих попытках не было ошибок, но просто не было ' я что-то делаю. Скрипт завершен, а метод не вызван.

Почему это не работает и как в этом случае вызвать метод из другого скрипта?

1 Ответ

3 голосов
/ 06 мая 2020

require добавит .pm к голому слову, но если вы используете переменную, вы должны сделать что-то вроде этого require "$x.pm"; $x->foo(). Подробнее в perldoc -f require

п.пл .:

use lib './';

my $x = 'P';

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

$x->$y();

п-м:

package P;

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

1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...