my $module_var = 'module';
eval "use $module_var; 1" or die $@;
my $module_instance = $module_var->new();
Обратите внимание, что eval
- это возможная дыра в безопасности. Если $module_var
содержит код, он будет выполнен. Одним из способов решения этой проблемы является использование Class :: MOP . Заменить строку eval
на:
use Class::MOP;
Class::MOP::load_class($module_var);
Если вы не хотите требовать Class :: MOP, вы можете скопировать из него функцию _is_valid_class_name
в свой код и просто убедиться, что $module_var
содержит допустимый класс перед вами eval
. (Обратите внимание, что если вы используете Moose , вы уже используете Class :: MOP за кулисами.)