my $wrap_len = 10; my $buf = ''; LOOP: for (;;) { while (length($buf) < $wrap_len+1) { my $rv = read(DATA, $buf, $wrap_len+1-length($buf), length($buf)); die if not defined $rv; last LOOP if not $rv; } ($buf =~ s/^(.*)\n// || $buf =~ s/^(.{0,$wrap_len})//) and print("$1\n"); } print($buf); __DATA__ abcdefghijklm ABCDEFGHIJKLM