按变量引用一个类,perl

时间:2012-08-17 22:11:05

标签: perl subroutine

我正在编写一个带插件模块的IRC bot。有一个SQLite DB存储命令定义。

我将拥有一个模块Bot::Plugins::Modes,它将包含kickvoice等方法。我像这样实例化Modes

$modes = new Bot::Plugins::Modes

我可以调用这样的方法:

$modes->voice(arg1 arg2);

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

侦听bot命令的侦听器执行它们。我想做点像......

&{"$module->$method"}(arg1, arg2)

但我无法弄清楚语法。在它们可以通过模块加载之前,我只能做:

&{$command}(arg1, arg2)

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

$module->$method(arg1, arg2);

另外,UNIVERSAL::can如果要在调用方法之前检查方法是否存在。

$sub = $module->can($method);
if ($sub) {
    &$sub($module, arg1, arg2);
}

(调用&$sub(arg1, arg2)就像调用package::method(arg1, arg2),而不是package->method(arg1, arg2)。)