我正在编写带有插件模块的IRC机器人。有一个SQLite数据库存储命令定义。

我将使用Bot::Plugins::Modes模块,它将使用kickvoice这样的方法。我像这样实例化Modes:

$modes = new Bot::Plugins::Modes

我可以这样调用一个方法:
$modes->voice(arg1 arg2);

在我的数据库中,我有modulemethod字段。对于此示例,模块和方法分别为modesvoice

侦听机器人命令的侦听器将执行它们。我正在尝试做类似...
&{"$module->$method"}(arg1, arg2)

但是我无法弄清楚语法。在通过模块加载它们之前,我可以做以下事情:
&{$command}(arg1, arg2)

其中$command是数据库中的方法字段。在这种情况下,它只是“语音”,而voice是一个子例程。

最佳答案

类名和方法名都可以是标量。其余语法是正常的。

my $module = "Foo";
my $method = "bar";

# Same as Foo->bar($arg1, $arg2);
$module->$method($arg1, $arg2);

10-06 03:16