my $i = index $block, "\n"; while($i > 0){ push @lines, substr($block,0,$i); substr($block,0,$i+1,''); $i = index $block, "\n"; } #### my $block; local $_ = ''; my $i; while(my $n = read $fh, $block, 8192 ) { $_ .= $block; while((my $i = index $_, "\n") >= 0){ push @lines, substr($_, 0, $i); substr($_, 0, $i+1, ''); } } push @lines, $_ if length;