perl - 通过引用调用模块函数

标签 perl dynamic module subroutine

我正在考虑构建一个调度表来调用我编写的许多 Perl 模块。

例如,如果我有一个名为 Hello.pm 的包用一个简单的函数hello()在其中,我想获得对此函数的代码引用。

以下不起作用:

my $code_ref=\&Hello->hello();
$code_ref->();

但是,如果函数 hello 从包中导出,则以下工作:
my code_ref=\&hello;
code_ref->();

有谁知道第一种情况的正确语法?或者这根本不可能?

最后,我想用我所有的代码引用填充一个哈希表。

#####感谢所有答案

几个答案指出的正确调用是:
my $code_ref=\&Hello::hello;
$code_ref->();

我想在调度表中加载 10 个不同文件中的大约 10 个模块。
这使我更容易将配置作为数据加载,并与代码分开。
这允许我在测试台中加载其他模块而无需修改我的代码——只需修改配置文件。 Higher Order Perl 的作者 Mark Dominus 对此有一些很好的例子。

最佳答案

如果要引用 Hello 模块中的 hello sub,则调用它,使用:

my $code_ref = \&Hello::hello;
$code_ref->();

如果要在 Hello 中调用一个名为“hello”的方法,可以这样:
my $method = "hello";
Hello->$method();

关于perl - 通过引用调用模块函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14077666/

相关文章:

如果 PATH 环境变量被初始化,Perl IPC::Cmd 不会运行应用程序

c++ - 通过复制到函数将指针传递给动态分配的数组会产生意外结果

c - 动态数组是在没有 malloc 的情况下分配的

Python 在脚本中记录导入模块版本的最佳方法

perl - Win32_Product 如何工作?

perl - perl中\0是什么意思?

perl - 如何从子进程中读取错误?

dynamic - 三个js顶点不更新

重新导出时的 Haskell 命名空间

python - 在 Pycharm 项目中使用外部模块