我正在编写带有插件模块的IRC机器人。有一个SQLite数据库存储命令定义。
我将使用Bot::Plugins::Modes
模块,它将使用kick
和voice
这样的方法。我像这样实例化Modes
:
$modes = new Bot::Plugins::Modes
我可以这样调用一个方法:
$modes->voice(arg1 arg2);
在我的数据库中,我有
module
和method
字段。对于此示例,模块和方法分别为modes
和voice
。侦听机器人命令的侦听器将执行它们。我正在尝试做类似...
&{"$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);