I don't agree. It looks like what the OP is doing is sort of similar as what you expect from the shell - taking the argument string, and chopping it up into pieces. That isn't what any of the getopt tools are doing - they are taking the pieces and processing that.
In parsing/compiling terms, getopt and Getopt::* are parsers. The OP is lexing: turning a string into tokens. And that's what the shell is doing as well (which makes the qx trick work - although the shell will parse things different than the OP does).