Trollop FAQ
-----------

Q: Why is it called "Trollop"?
A: No reason.

Q: Why should I use Trollop?
A: Because it will take you FEWER LINES OF CODE to do reasonable option parsing
   than any other option parser out there.

   Look at this:

     opts = Trollop::options do
       opt :monkey, "Use monkey mode"
       opt :goat, "Use goat mode", :default => true
       opt :num_limbs, "Set number of limbs", :default => 4
     end

   That's it. And opts is a hash and you do whatever you want with it.
   Trivial. You don't have to mix option processing code blocks with the
   declarations. You don't have to make a class for every option (what is this,
   Java?). You don't have to write more than 1 line of code per option.

   Plus, you get a beautiful help screen that detects your terminal width and
   wraps appropriately. C'mon, that's hot.

Q: What is the philosophy behind Trollop?
A: Must a commandline option processor have a philosophy?

Q: Seriously now. What is it?
A: Ok, it's this: Trollop *just* does the parsing and gives you a hash table
   of the result. So whatever fancy logic or constraints you need, you can
   implement by operating on that hash table. Options that disable other
   options, fancy constraints involving multiple sets of values across multiple
   sets of options, etc. are all left for you to do manually.

   (Trollop does support limited constraint setting (see #conflicts and
   #depends), but any non-trivial program will need to get fancier.)

   The result is that using Trollop is pretty simple, and whatever bizarre
   logic you want, you can write yourself. And don't forget, you can call
   Trollop::die to abort the program and give a fancy options-related error
   message.

Q: What happens to the other stuff on the commandline?
A: Anything Trollop doesn't recognize as an option or as an option parameter is
   left in ARGV for you to process.

Q: Does Trollop support multiple-value arguments?
A: Yes. If you set the :type of an option to something plural, like ":ints",
   ":strings", ":doubles", ":floats", ":ios", it will accept multiple arguments
   on the commandline and the value will be an array of these.

Q: Does Trollop support arguments that can be given multiple times?
A: Yes. If you set :multi to true, then the argument can appear multiple times
   on the commandline, and the value will be an array of the parameters.

Q: Does Trollop support subcommands?
A: Yes. You get subcommand support by adding a call #stop_on within the options
   block, and passing the names of the subcommands to it. (See the third
   example on the webpage.) When Trollop encounters one of these subcommands on
   the commandline, it stops processing and returns.

   ARGV at that point will contain the subcommand followed by any subcommand
   options, since Trollop has contained the rest. So you can consume the
   subcommand and call Trollop.options again with the particular options set
   for that subcommand.

   If you don't know the subcommands ahead of time, you can call
   #stop_on_unknown, which will cause Trollop to stop when it encounters any
   unknown token. This might be more trouble than its worth if you're also
   passing filenames on the commandline.

   It's probably easier to see the example on the webpage than to read all
   that.

Q: Why does Trollop disallow numeric short argument names, like '-1' and '-9'?
A: Because it's ambiguous whether these are arguments or negative integer or
   floating-point parameters to arguments. E.g., what about "-f -3".  Is that a
   negative three parameter to -f, or two separate parameters? 

   I could be very clever and detect when there are no arguments that require
   floating-point parameters, and allow such short option names in those cases,
   but opted for simplicity and consistency.
