Perhaps because its just not the same thing? Your's sets $_ to the elements of the array, while Popcorn Dave's sets $_ to one more than the indices of the array (which probably isn't the desired result). As broquaintsuggests, I tend to use the for(0..$#ARGV) version if I happen to need the indices.