The fundamental reason the CPAN script system doesn't work as well as the module system is that we want you code, but not just your script. We want whatever your script does to be available through a module API so we can plug it in to our work instead of having to shell out to it. Hence, when you write a script others might like, you should factor out the operative bits into a module. Then have your script use that module. Put the script in the bin directory of the module's distribution and add it to the list of executables in your Build.PL or Makefile.PL. Then we can get to the juicy bits of your code in our code, or use your script as is. Give the people what they want: choice.