You are pretty close in your description, but not quite right. I can't think of a time that an array is "undefined". They are either empty, or non-empty.
The snippet first checks if @ARGV is non-empty. An array evaluated in scalar context returns the number of elements it contains. Since boolean context is a special case of scalar context, @ARGV evaluates to 0 (false) if it is empty, and 1 or more (true) if has contents.
It's best not to write code like this. If you have any switch processing to do, just use Getopt::Long. Every time I try to short cut around using it, I wind up needing it later, anyway. Your snippet will not work properly if -v is the second option. Getopt::Long would be unaffected, and it has the advantage of being tested and documented code.
I know the making the distinction between undefined and empty may seem pedantic. But making sure that you really get these kinds of details will help you avoid some nasty, subtle bugs.
|