package My; print "Loading...\n"; sub Run { print "Running\n" } #### use My; delete $INC{"My.pm"}; undef &My::Run; # Why do this?! delete $My::{Run}; require My; eval "My::Run()"; My::Run(); #### Loading... Loading... Running Undefined subroutine &My::Run called at -e line 1. #### use My; delete $INC{"My.pm"}; delete $My::{Run}; require My; eval "My::Run()"; My::Run(); #### Loading... Loading... Running Running #### use My; ; # NEW delete $INC{"My.pm"}; delete $My::{Run}; require My; eval "My::Run()"; My::Run(); #### Loading... Loading... Running again Running #### Loading... Loading... Running again