Есть пара вещей, которые вам не хватает.Во-первых, Frontier :: Daemon вызывает «методы», которые вы предоставляете, как простые вызовы подпрограмм, но ваши два предоставленных метода ожидают вызова в качестве методов вашего объекта удаленного сервера.Измените свой код, чтобы сделать это:
my $svr = Frontier::Daemon->new(
methods => {
get_keyword_names => sub { $self->get_keyword_names(@_) },
run_keyword => sub { $self->run_keyword(@_) },
},
...
для вызова ваших методов так, как они ожидают.
Во-вторых, ваши get_keyword_names пытаются вернуть массив, но интерфейс, который вы используете, кажется,разрешить только одно возвращаемое значение и вызывает методы в скалярном контексте, заставляя get_keyword_names возвращать количество элементов в массиве.Я думаю, что вы хотите вернуть ссылку на массив вместо:
return \@methods;