如何在Perl中有条件地使用模块?

前端之家收集整理的这篇文章主要介绍了如何在Perl中有条件地使用模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在Perl中做这样的事情:
  1. $Module1="ReportHashFile1"; # ReportHashFile1.pm
  2. $Module2="ReportHashFile2"; # ReportHashFile2.pm
  3.  
  4. if(Condition1)
  5. {
  6. use $Module1;
  7. }
  8. elsif(Condition2)
  9. {
  10. use $Module2;
  11. }

ReportHashFile * .pm包含一个ReportHashFile包.

还要怎么引用一个数组里面的模块,基于动态模块名?

  1. @Array= @$Module1::Array_inside_module;

有没有办法我可以实现这一点.某种编译器指令?

解决方法

您可能会发现 if模块对此有用.

否则,基本思想是使用require,这在运行时发生,而不是使用,这在编译时发生.注意 ‘

  1. BEGIN {
  2. my $module = $condition ? $Module1 : $Module2;
  3. my $file = $module;
  4. $file =~ s[::][/]g;
  5. $file .= '.pm';
  6. require $file;
  7. $module->import;
  8. }

至于解决全局变量,如果您刚刚导出变量或将函数返回给调用者,则可能会更容易,您可以通过其不合格的名称使用它.否则还有可能使用一种方法,并将其称为$Module-> method_name.

或者,您可以使用符号参考,如perlref中所述.然而,这通常是一个很好的代码气味.

  1. my @array = do {
  2. no strict 'refs';
  3. @{ ${ "${Module}::Array_inside_module" } };
  4. };

猜你在找的Perl相关文章