While I agree with quite about everyone else's opinion that, say, Getopt::Long is very far from being "very clunky and difficuly to manage" and that the OP should better use some Getopt::* module, ++your answer since what is most awkward in his code is the bizarre flow control. Well worth then to point out that the "canonical" way to iterate over an array (or more generally, a list) is a for cycle - unless one has very special needs.
To this, for the benefit of the OP, I would only add that if he has whatever code that "clobbers" an array, and if this is undesirable, then copying it to another array and working on the latter is certainly possible. Well, it may not be sensible if the starting array is huge, but that can hardly be the case for @ARGV. In this case, as in many others, though it is better not to clobber it in the first place...