The problem you are having is not a 'true' memory leak, i.e. the
memory in fact is being freed. It just isn't being returned to the OS,
but rather to Perl's own memory pool. Those two things are often confused.
The difference is that if you'd run your while loop another
time, it would not allocate another 90MB, but rather reuse the
memory freed upon undef-ing the @X. If it were a memory leak
in the sense that the rest of the thread is talking about, it'd eat up
more and more memory, without you having a chance to reuse it
(without exiting the interpreter).