Perl,动态包含包 [英] Perl, dynamically include package

查看:20
本文介绍了Perl,动态包含包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个 perl 模块文件,我想在运行时动态地包含和使用它.所述模块包含一个我需要在运行前不知道其名称的情况下实例化的类.

Let's say I have a perl module file and I want to include and use it dynamically at runtime. Said module includes a class that I need to instantiate without knowing its name until runtime.

例如

#inside module.pm

package module;

sub new {
#setup object
}

#inside main.pl

#get module.pm as argument
my $module_var = #load reference to module using text argument?
my $module_instance = $module_var->new();

推荐答案

无需 eval 即可完成,如下所示:

This can be done without eval as follows:

my $module_name = 'Some::Module';

(my $require_name = $module_name . ".pm") =~ s{::}{/}g;

require $require_name;

my $obj = $module_name->new();

如果您需要多次执行此操作,只需将该代码包含在一个子程序中即可:

If you need to do this many times, just wrap up that code in a subroutine:

sub load_module {
    for (@_) {
        (my $file = "$_.pm") =~ s{::}{/}g;
        require $file;
    }
}

load_module 'Some::Module', 'Another::Module';

这篇关于Perl,动态包含包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆