you have it almost right, perl running on most moderen OS will free memory, the OS will try to absorb the freed memory. The issue comes into when and how the memory was allocated from the OS, if it was taken in in small chunks (like durring a loop where you grow an array wiothout predefing how large it would be) and is freed the OS may have problems taking it back and making it available. If the memory was allocated in a large chunk it has a batter chance to be freed and taken back into the pool after usage. On the plus side perl will reuse allocated memory when it can so this can end up saving time. If the OP is seeing memory continue to grow every time he does a merge file he may want to look for a data structure that is not going out of scope and getting freed between each loop, this may be a closure issue or just a bug where you are using a global var instead of a locally scoped one that clears itself when you leave the scope.