Perl Hash of Subfunctions

Chr*_*s R 8 perl

我希望有一个包含对子函数的引用的哈希,我可以根据用户定义的变量调用这些函数,我将尝试给出一个我正在尝试做的简化示例.

my %colors = (
    vim => setup_vim(),
    emacs => setup_emacs(),
)

$colors{$editor}(arg1, arg2, arg3)
Run Code Online (Sandbox Code Playgroud)

where setup_vim()setup_emacs()将是我的文件中稍后定义的子函数,并且$editor是用户定义的变量(即vim或emacs).这可能吗?我无法让它工作,或找到有关该主题的良好信息.谢谢.

(注意我现在已经实现了它作为一个工作的Switch,但我认为像上面这样的哈希会更容易在现有代码中添加新条目)

bti*_*lly 18

这是语法.

my %colors = (
    vim => \&setup_vim,
    emacs => \&setup_emacs,
);

$colors{$editor}(@args)
Run Code Online (Sandbox Code Playgroud)

请注意,您实际上可以直接创建函数

my %colors = (
    vim => sub {...},
    emacs => sub {...},
);
Run Code Online (Sandbox Code Playgroud)

如果你熟悉闭包,那么Perl支持对已经被声明为lexically的变量的完全闭包,你可以用我的.