If you provided a complete program and sample data that manifests the problem it would be easier to help. With only the fragments you have provided, one can only guess what might be causing the problem.
The console output you provide suggests that there might be unexpected carriage control characters in your output that cause your output to be written in unexpected, overlapping locations. When I have such problems I use the od command to examine the output in details, including non-printing characters (with od -c). This might help you identify what is going on.
You could try perl script.pl | od -c