I recently discovered the extLib OptPase module [1] . It’s a very nice and complete replacement for the good old Arg in the standard library. I’m gonna give a small example on how to use it. I hope this can be useful to somebody.
I first build an Option module to clearly separate the options handling from the rest of my program. To keep it short we add only two options, debug and output. Debug has a short and long option, output is only a string. We also add two group options to spice up the example …
open ExtLib
module Options =
struct
open OptParse
let debug = StdOpt.store_true ()
let out = StdOpt.str_option ()
let options = OptParser.make ()
open OptParser
let g = add_group options ~description:"general options" "general" ;;
let o = add_group options ~description:"output options" "output" ;;
add options ~group:g ~short_name:'d' ~long_name:"debug" ~help:"Debug information" debug;
add options ~group:o ~long_name:"out" ~help:"Send output to a file" out;
end
To actually parse the options we have a main function that invokes the parse_argv function, stores all the options in the respective variables in the module Options and return a list of string containing all the positional arguments given on the command line that are not parsed as options.
let main () =
let posargs = OptParse.OptParser.parse_argv Options.options in
if OptParse.Opt.get Options.debug then
Printf.eprintf "enabling debug\n"
;
(* dump all positional arguments *)
let ch =
if OptParse.Opt.is_set Options.out then
open_out (OptParse.Opt.get Options.out)
else stdout
in
List.iter (Printf.fprintf ch "%s\n") posargs
;;
main ()
#./test.native --help
usage: test.native [options]
options:
-h, --help show this help message and exit
general:
general options
-d, --debug Debug information
output:
output options
--out=STR Send output to a file
#./test.native -d one two three
one
two
three
enabling Debug
#
[1] http://ocaml-extlib.googlecode.com/svn/doc/apiref/OptParse.html