Would it be too difficult or complicated for you to explain what sort of option processing you are actually hoping to do? Normally, when someone writes a command-line tool that handles optional args, it will print a synopsis whenever the user types a bad arg, or specifically asks for help.
Usually, the programmer includes a "-h" option for displaying the synopsis, or simply lets Getopt::Long throw an error when "-h" or "-?" is used as an option, and makes sure to display the synopsis whenever Getopt::Long throws an error.
What would the synopsis be for your script? Why would you need a subroutine to process your options? What do "$substr1" and "$substr2" contain (where is the code that assigns values to those variables)?