Well, DATA is just a buffered filehandle that has read the src file up to the __END__. Some of the file content beyond that point has been read into a buffer, some is still waiting to be read by the OS. When you fork, each process gets it's own copy of the buffer, but shares the filehandle for any remaing data. So you're bound to get odd effects.
Dave.