in reply to Getopt::Long

Why bother? Getopt::Long is already nicely simplified - you're just making things more complicated again.

You're always going to have to establish what command line arguments you need to accept, what type they are (required/optional strings, numbers, switches etc) and populate variables or data structures. This is likely to be different for each program and so doesn't warrant another layer of code IMHO.

If the information in this post is inaccurate, or just plain wrong, don't just downvote - please post explaining what's wrong.
That way everyone learns.