eval "require $ENV{a}";
"use
" doesn't work well here because it only imports in the context of the eval
.
As @Manni said, actually, it's better to use require. Quoting from man perlfunc
:
If EXPR is a bareword, the require assumes a ".pm" extension and
replaces "::" with "/" in the filename for you, to make it easy to
load standard modules. This form of loading of modules does not
risk altering your namespace.
In other words, if you try this:
require Foo::Bar; # a splendid bareword
The require function will actually look for the "Foo/Bar.pm" file
in the directories specified in the @INC array.
But if you try this:
$class = 'Foo::Bar';
require $class; # $class is not a bareword
#or
require "Foo::Bar"; # not a bareword because of the ""
The require function will look for the "Foo::Bar" file in the @INC
array and will complain about not finding "Foo::Bar" there. In this
case you can do:
eval "require $class";