假设我有一个perl模块文件,我想在运行时动态包含和使用它.所述模块包括一个我需要实例化的类,直到运行时才知道它的名字.
例如,
- #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的情况下完成,如下所示:
- my $module_name = 'Some::Module';
- (my $require_name = $module_name . ".pm") =~ s{::}{/}g;
- require $require_name;
- my $obj = $module_name->new();
如果您需要多次执行此操作,只需将该代码包装在子例程中:
- sub load_module {
- for (@_) {
- (my $file = "$_.pm") =~ s{::}{/}g;
- require $file;
- }
- }
- load_module 'Some::Module','Another::Module';