in reply to Code references as use() parameters
The real problem isn't that the subroutine reference is taken before it exists, as this actually works due to the magic of Perl:
package A; sub import { *b = $_[1] }; BEGIN { $INC{"A.pm"} = undef } # Stop 'use' from loading A.pm package main; use A \&c; print A::b(), "\n"; # prints "YO\n" sub c { "YO" }
I suspect your problem is that Alzabo::MethodMaker is trying to execute name_maker() before it is defined (otherwise, you wouldn't have this question, as the above code should 'work'). The only way around this is to define name_maker() first, or to delay execution of Alzabo::MethodMaker::import using one of the means suggested by other people.
In Section
Seekers of Perl Wisdom