How could my shell get the newlines? Look more closely... I used
so I could display the control characters in the output and so not be subject to output character translation. There's no difference in the output when I redirect to a file. Note that there is no output past the control-Z. If you're trying the script yourself, make sure to binmode STDOUT so that you don't turn "\n" back into "\r\n". And try a file with a control-Z in it.