我希望有一个包含对子函数的引用的哈希,我可以根据用户定义的变量调用这些函数,我将尝试给出一个我正在尝试做的简化示例。
my %colors = (
vim => setup_vim(),
emacs => setup_emacs(),
)
$colors{$editor}(arg1, arg2, arg3)
其中setup_vim()
和setup_emacs()
将是我文件中稍后定义的子函数,$editor
是用户定义的变量(即vim或emacs)。这可能吗?我无法使其发挥作用,或找到有关该主题的良好信息。感谢。
(注意我现在已经将它实现为一个工作的Switch,但我认为像上面这样的哈希会更容易在现有代码中添加新条目)
答案 0 :(得分:17)
这是语法。
my %colors = (
vim => \&setup_vim,
emacs => \&setup_emacs,
);
$colors{$editor}(@args)
请注意,您实际上可以使用
直接创建函数my %colors = (
vim => sub {...},
emacs => sub {...},
);
如果你熟悉闭包,Perl支持对词法声明的变量进行完全闭包,你可以用它做。
答案 1 :(得分:3)
您必须将对要调用的子例程的引用传递给哈希。
以下是一个例子:
sub myFunc {
print join(' - ', @_);
}
my %hash = ( key => \&myFunc );
$hash{key}->(1,2,3);
使用\& myFunc,您可以获得该功能的参考点。重要的是离开()。哦,你会通过对函数返回值的引用。
通过引用调用函数时,必须使用 - >来解除它。操作