in reply to command line options and sub-options?
One way of doing is it to make the wrapper script aware of all the possible options, read them in, deal with its own options, and pass the rest to whichever sub program it starts. Alternatively, require the wrapper options to be passed first, then the sub program options, separated by --. You can then use Getopt::Long in the wrapper program to read its own options; the rest of the options are available in @ARGV which can be passed to your sub program. A third option is to parse @ARGV yourself. It's not that complicated.