Обычно, динамически загружаемые модули загружаются во время выполнения, так что можно было бы использовать одно из следующих действий:
my $module_path = $module_name;
$module_path =~ s{::}{/}g;
$module_path .= '.pm';
require $module_path;
или
$module_name !~ /^\w+(?:::\w+)*\z/
or die("Bad module name\n");
eval("use $module_name qw(); 1")
or die [email protected];
Это не импорт, так как импортировать его во время выполнения не имеет смысла. Вы хотите импортировать из модулей, что означает, что вы действительно хотите загрузить модуль во время компиляции. Следующий удобный трюк:
use if 1, $module_name, @imports;
Вы также можете использовать одно из следующих действий:
BEGIN {
my $module_path = $module_name;
$module_path =~ s{::}{/}g;
$module_path .= '.pm';
require $module_path;
import $module_name @imports;
}
или
BEGIN {
$module_name !~ /^\w+(?:::\w+)*\z/
or die("Bad module name\n");
eval("use $module_name \@imports; 1")
or die [email protected];
}
Есть модули, которые также могут помочь.
Также см. Переключатель ['-M' в perlrun] (https://metacpan.org/pod/perlrun#-m [-]), чтобы указать модуль для загрузки из командной строки. – mob
Почему downvotes? На самом деле это хороший вопрос. –
@ChankeyPathak Я тоже не знаю, почему, но тег [tag: perl] является одним из наиболее неизменно отрицательных мест на SO. –