Actually that's not entirely correct.
foreach does not create a variable. It is my that creates the variable. And my will use some free memory. My guess is that the references counter is increased by using the variable in an anonymous, subroutine (/closure). Which means that at the end of the foreach-block the reference counter is not 0 (and therfor the memory is not freed). Then that same part of the memory is not free at the start of the next iteration, so my will use some other memory.
Some code:
for my $x (0 .. 3) { print \$x }; ==> this code should print the same references for all 4 iterations.
for my $x (0 .. 3) { print \$x; push @z, sub { $x; }; } ==>This code will print 4 different references.