Много лет спустя, eval "use $mod_name";
, кажется, работает нормально (по крайней мере, на 5.8.8).
Преимущество перед eval "require $mod_name";
состоит в том, что экспортируемые по умолчанию загруженные модули автоматически импортируются; другими словами:
eval "use $mod_name";
является более коротким эквивалентом
eval "require $mod_name"; $mod_name->import();
Вот тестовая команда, которая передает имя модуля через env. переменная mod_name
, загружает и импортирует модуль, затем использует импортированную функцию (предполагается, что POSIX-подобная оболочка):
$ mod_name='Data::Dumper' perl -e 'eval "use $ENV{mod_name}"; print Dumper("hi!")'
$VAR1 = 'hi!';
Возможно, мне не хватает тонкостей; если да, пожалуйста, дайте мне знать.