Невозможно загрузить `Cwd` (и другие неосновные модули) во время выполнения
Представьте, что я хочу загрузить модуль во время выполнения. Я ожидал, что это сработает
use warnings;
use strict;
eval {
require Cwd;
Cwd->import;
};
if ($@) { die "Can't load Cwd: $@" }
say "Dir: ", getcwd;
но это не так, согласноBareword "getcwd" not allowed ...
.
Cwd экспортgetcwd
по умолчанию. Я попытался дать имя (имена) функцииimport
и я попробовал с другими его функциями. Это работает с полным именем,say Cwd::getcwd
, так что я думаю, что это не импорт.
Это работает как попытка для нескольких других основных модулей, которые я пробовал, например
use warnings;
use strict;
eval {
require List::Util;
List::Util->import('max');
};
if ($@) { die "Can't load List::Util: $@" }
my $max = max (1, 14, 3, 26, 2);
print "Max is $max\n";
ПРИМЕЧАНИЕ добавлено Видимо, вызовы функций с круглыми скобками дают подсказку компилятору. Однако, на мой взгляд, вопрос остается, пожалуйста, смотритеРЕДАКТИРОВАТЬ в конце. Кроме того, такая функция, какfirst BLOCK LIST
из модуля выше не работает.
Тем не менее, этоне работать на несколько (хорошо зарекомендовавших себя) неосновных модулей, которые я попробовал. Хуже и более запутанно, он не работает даже с полностью определенными именами.
Я могу представить, что используемый символ (функция) не известен во время компиляции, еслиrequire
используется во время выполнения, но работает для (других) основных модулей. Я думал, что это стандартный способ загрузки во время выполнения.
Если мне нужно использовать полные имена при динамической загрузке, тогда хорошо, но что это за несоответствие? И какделать Я загружаю (и использую) неосновные модули во время выполнения?
Я тоже пробовал сModule::Load::Conditional
и это не сработало.
Чего мне не хватает, и как загружать модули во время выполнения? (Пробовал с5.16
а также5.10.1
.)
РЕДАКТИРОВАТЬ
Как отмеченоМэтт ДжейкобЗвонок с круглыми скобками работает,getcwd()
, Однако, учитываяperlsub
NAME LIST;
# Скобки необязательны, если предварительно объявлены / импортированы.
это означает, что импорт не сработал и вопрос почему остается.
Кроме того, использование различного синтаксиса в зависимости от того, как загружен модуль, не очень хорошо. Кроме того, я не могу заставить работать неосновные модули, особенно те с синтаксисом, какСписок :: MoreUtils есть.