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).
Yes, you're right. However, I don't know the scope of the original poster's problem, so I thought I'll just supply the link so that the OP can think about whether the modules might already do what (s)he needs to do -- or not.