http://www.perlmonks.org?node_id=249287


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.