Because Perl doesn't actually have "for". For and Foreach are synonyms which have been overloaded with the C style for loop. The deparser converts this to the while loop because that is what it really is. If you use for to process an array, the deparser happily converts it to foreach.
E:\>perl -MO=Deparse -e "for( [1..10] ){ print $_ }"
foreach $_ ([(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)]) {
print $_;
}
-e syntax OK