User-defined subroutines to handle options Ultimate control over what should be done when (actually: each time) an option is encountered on the command line can be achieved by designating a reference to a subroutine (or an anonymous subroutine) as the option destination. When GetOptions() encounters the option, it will call the sub-routine with two or three arguments. The first argument is the name of the option. For a scalar or array destination, the second argument is the value to be stored. For a hash destination, the second arguments is the key to the hash, and the third argument the value to be stored. It is up to the subroutine to store the value, or do whatever it thinks is appropriate. A trivial application of this mechanism is to implement options that are related to each other. For example: my $verbose = ''; # option variable with default value (false) GetOptions ('verbose' => \$verbose, 'quiet' => sub { $verbose = 0 }); Here "--verbose" and "--quiet" control the same variable $verbose, but with opposite values. If the subroutine needs to signal an error, it should call die() with the desired error message as its argument. GetOptions() will catch the die(), issue the error message, and record that an error result must be returned upon completion. If the text of the error message starts with an exclamantion mark "!" it is interpreted specially by GetOptions(). There is currently one special command implemented: "die("!FINISH")" will cause GetOptions() to stop processing options, as if it encountered a double dash "--".