我想在Perl中做这样的事情:
- $Module1="ReportHashFile1"; # ReportHashFile1.pm
- $Module2="ReportHashFile2"; # ReportHashFile2.pm
- if(Condition1)
- {
- use $Module1;
- }
- elsif(Condition2)
- {
- use $Module2;
- }
ReportHashFile * .pm包含一个ReportHashFile包.
还要怎么引用一个数组里面的模块,基于动态模块名?
- @Array= @$Module1::Array_inside_module;
有没有办法我可以实现这一点.某种编译器指令?
解决方法
您可能会发现
if
模块对此有用.
否则,基本思想是使用require,这在运行时发生,而不是使用,这在编译时发生.注意 ‘
- BEGIN {
- my $module = $condition ? $Module1 : $Module2;
- my $file = $module;
- $file =~ s[::][/]g;
- $file .= '.pm';
- require $file;
- $module->import;
- }
至于解决全局变量,如果您刚刚导出变量或将函数返回给调用者,则可能会更容易,您可以通过其不合格的名称使用它.否则还有可能使用一种方法,并将其称为$Module-> method_name.
或者,您可以使用符号参考,如perlref中所述.然而,这通常是一个很好的代码气味.
- my @array = do {
- no strict 'refs';
- @{ ${ "${Module}::Array_inside_module" } };
- };