in reply to print problem

The most accurate short answer is maybe.

On Linux Mandrake 8.0 through PuTTY and on Windows 98 SE with ActiveState build 623 I didn't need to flush buffers doing something similar. Different term types on different systems will do different things with the code I used. Considering the problem you are having, I'd say flushing buffers is a good idea. The $| variable is probably your very best bet, although the Term modules, Curses module, or possibly a few other things could help. I won't mention the other things, because using the three I already mentioned should be more than enough to get the job done and are widely used. There are, in the Perl spirit, even more ways to do it, but you probably will never need to use them. ;-)

Just in case you're curious, here's the Linux test code I used:
perl -e 'for (a..fred) { print "$_\r" } print "\n"'
...and here's the Windows 98 code:
perl -e "for (a..f) { sleep 1; print qq{$_\r} } print qq{\n};"
or
perl -e "for (a..fred) { print qq{$_\r} } print qq{\n};"