Лексические имена разрешены статически, поэтому я не уверен, как реализовать AUTOLOAD
без некоторой глубокой магии.
Что касается вашего конкретного примера, я также не совсем уверен, каким будет «правильный» способ сделать это, но вот «грязное» решение, которое, кажется, работает, заменив подпрограмму &foo
, экспортируемую модулем Foo
* * 1006
# get all subroutines exported by Foo by default
BEGIN my @reex = do {
use Foo;
MY::.pairs.grep(*.key.starts-with('&'));
}
# export our replacement subroutine (also in the default namespace)
sub foo is export {
say "new foo";
}
# re-export subroutines lacking a replacement
# placed at the end of the module so EXPORT will have been populated
BEGIN EXPORT::DEFAULT::{.key} //= .value
for @reex;