in reply to use module if condition is met
use requires code in at compile time so what you have really won't work. Your could use require which will do it at run-time but is slower. The best approach I've seen (believe this is in the Camel Book) is to use a BEGIN block in combination with eval. However that is going to only test if the module is installed, I don't believe variables such as your $type would be initialized yet (I could be wrong on that one)
Then of course you have the problem with your subs. You could create an AUTOLOAD in your modules that would capture any calls to subs that didn't exist and return some kind of flag to that affect.
Honestly though I think all that is really more work that you want. I think requireing the modules is going to be slower than just useing all the ones you may need even if you don't make calls to all of them. Then you don't have to worry about undefined subs either.
Lobster Aliens Are attacking the world!