in reply to Should I be using tie for this?
Maybe tie is completely the wrong thing to use here. If so what should I do?
It is indeed the wrong thing to do. What Tie::File does is provide an array interface to a file on disk. You can use huge files as an array because Tie::File only holds a part of the file in memory, swapping other parts in and out as necessary.
In your code I see the comment
Your first task is to find out why it is taking up so much space. Use the debugger to step through you program and see where it fails.
# I am guess that the script is dying because
# this will use up too much virtual memory and
# the OS (Window XP) kills the script.
Just assuming that something is wrong somewhere without determining the exact cause but throwing some code at the problem is not going to fix your program.