Harry Putnam <[EMAIL PROTECTED]> wrote: : : Where is this pesky newline coming from? : : if( $collect_lines : && /^( +Folder:| Subject: |From |Message-[Ii][Dd])/){ : push @chunk,$_; : } : if(/^START/){ : $cnthits++; : $collect_lines = ''; : @rev_chunk = reverse @chunk; : print "<@rev_chunk> <@chunk>\n"; : ---> @chunk = '';
Should be: @chunk = (); : $str = join("\n",@rev_chunk); : push @pre_out, "$str" ; : $str = @rev_chunk = ''; : } : last if($cnthits == ($count)); : } : @out = reverse @pre_out; It comes from three lines. Before the first pass, @chunk is not defined. The first message is scanned and pushed onto this empty array. After the first message, @chunk is defined as an array with a single element of ''. Subsequent lines are pushed on top of this array and then a join is used to add "\n" to each element including the ''. Since you're adding all those newlines back in, why take them out in the first place? my @out; my @chunk; while ( <PROC> ) { if ( /^STOP/ .. /^START/ ) { push @chunk, $_ if /^ +Folder:| Subject: |From |Message-[Ii][Dd]/; if ( /^START/ ) { push @out, join '', reverse @chunk; @chunk = (); } } last if @out == $count; } print "$_-- \n" foreach reverse @out; HTH, Charles K. Clarkson -- Head Bottle Washer, Clarkson Energy Homes, Inc. Mobile Home Specialists 254 968-8328 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]