use
загружает и импортирует модуль во время компиляции, в то время как require
загружает модуль только во время выполнения.
Поскольку пространство имен проверяется во время компиляции, вы не можете просто получить к нему доступ какВы могли бы модуль, который загружен и импортирован с use
.
Вы можете обойти это с помощью символических ссылок, но вы также можете захватить пространство имен в переменную.
(Предполагая, что есть только одинпространство имен в модуле, и оно совпадает с именем, используемым для его загрузки)
Foo.pm6 :
unit module Foo;
sub fubar () { say 'fubar' }
my \Foo = do require Foo;
Foo::fubar(); # fubar
(обратите внимание, чтоимя переменной не обязательно должно быть одинаковым.)