如何使用仅在运行时才知道的Perl软件包?

前端之家收集整理的这篇文章主要介绍了如何使用仅在运行时才知道的Perl软件包?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Perl程序,需要使用包(我也写).其中一些包仅在运行系统中选择(基于某些环境变量).我不想在我的代码中为所有这些包放置一个“使用”行,当然,只有一个“使用”行,基于这个变量,如下所示:
  1. use $ENV{a};
@H_301_4@不幸的是,这当然不行.有什么想法如何做到这一点?

@H_301_4@提前致谢,
奥伦

解决方法

  1. eval "require $ENV{a}";
@H_301_4@“use”在这里不起作用,因为它只在eval的上下文中导入.

@H_301_4@正如@Manni所说,其实最好是使用require.引用人perlfunc:

  1. If EXPR is a bareword,the require assumes a ".pm" extension and
  2. replaces "::" with "/" in the filename for you,to make it easy to
  3. load standard modules. This form of loading of modules does not
  4. risk altering your namespace.
  5.  
  6. In other words,if you try this:
  7.  
  8. require Foo::Bar; # a splendid bareword
  9.  
  10. The require function will actually look for the "Foo/Bar.pm" file
  11. in the directories specified in the @INC array.
  12.  
  13. But if you try this:
  14.  
  15. $class = 'Foo::Bar';
  16. require $class; # $class is not a bareword
  17. #or
  18. require "Foo::Bar"; # not a bareword because of the ""
  19.  
  20. The require function will look for the "Foo::Bar" file in the @INC
  21. array and will complain about not finding "Foo::Bar" there. In this
  22. case you can do:
  23.  
  24. eval "require $class";

猜你在找的Perl相关文章