Perl,动态地包括包 [英] Perl, dynamically include package

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

问题描述

假设我有一个perl模块文件,我想在运行时动态地包含和使用它。所述模块包括一个类,我需要实例化而不知道其名称,直到运行时为止。



例如,

  #inside module.pm 

包模块;

sub new {
#setup对象
}

#inside main.pl

#get module.pm as参数
我的$ module_var = #load引用模块使用文本参数?
我的$ module_instance = $ module_var-> new();


解决方案

这可以在没有eval的情况下完成如下: p>

 我的$ module_name ='Some :: Module'; 

(我的$ require_name = $ module_name。.pm)=〜s {::} {/} g;

require $ require_name;

我的$ obj = $ module_name-> new();

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

  sub load_module {
for(@_){
(my $ file =$ _。pm) =〜s {::} {/} g;
需要$文件;
}
}

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


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.

For example,

#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();

解决方案

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天全站免登陆