while( @data ) { /^HEADING/ ... !/^HEADING/ and push @headings, $_; /^TITLE/ ... !/^TITLE/ and push @titles, $_; /^COMPND/ ... !/^COMPND/ and push @cmpnds, $_; } #### $re_types = qr/(HEADING|TITLE|COMPND)/; while (@data) { /^$re_types(.*)$/ ... !/^$1/ and push @{$type{$1}}, $2; } #### #! perl -slw use strict; my @data = ; my (@headers, @titles, @compnds); for (@data) { (/^HEADER (?:\d+ )?(.*?)$/ and push(@headers, '' )) ... !/^HEADER (?:\d+ )?(.*?)$/ and $1 and $headers[-1] .= $1, next; (/^TITLE (?:\d+ )?(.*?)$/ and push(@titles, '' )) ... !/^TITLE (?:\d+ )?(.*?)$/ and $1 and $titles[-1] .= $1, next; (/^COMPND (?:\d+ )?(.*?)$/ and push(@compnds, '' )) ... !/^COMPND (?:\d+ )?(.*?)$/ and $1 and $compnds[-1] .= $1; } print for @headers; print for @titles; print for @compnds; __DATA__ HEADER Header 1 stuff TITLE Title 1 stuff TITLE 2 more title 1 stuff COMPND complicated stuff 1 COMPND 2 continued complicated stuff 1 HEADER Header 2 stuff TITLE Title 2 stuff TITLE 2 more title 2 stuff COMPND complicated stuff 2 COMPND 2 continued complicated stuff 2 HEADER Header 3 stuff TITLE Title 3 stuff TITLE 2 more title 3 stuff COMPND complicated stuff 3 COMPND 2 continued complicated stuff 3 COMPND 3 continued complicated stuff 3 HEADER Header 4 stuff TITLE Title 4 stuff TITLE 2 more title 4 stuff COMPND complicated stuff 4 COMPND 2 continued complicated stuff 4 HEADER Header 5 stuff TITLE Title 5 stuff TITLE 2 more title 5 stuff COMPND complicated stuff 5 COMPND 2 continued complicated stuff 5 HEADER Header 6 stuff TITLE Title 6 stuff TITLE 2 more title 6 stuff COMPND complicated stuff 6 COMPND 2 continued complicated stuff 6 #### C:\test>221570 Header 1 stuff Header 2 stuff Header 3 stuff Header 4 stuff Header 5 stuff Header 6 stuff Title 1 stuff 2 more title 1 stuff Title 2 stuff 2 more title 2 stuff Title 3 stuff 2 more title 3 stuff Title 4 stuff 2 more title 4 stuff Title 5 stuff 2 more title 5 stuff Title 6 stuff 2 more title 6 stuff complicated stuff 1 2 continued complicated stuff 1 complicated stuff 2 2 continued complicated stuff 2 complicated stuff 3 2 continued complicated stuff 3 3 continued complicated stuff 3 complicated stuff 4 2 continued complicated stuff 4 complicated stuff 5 2 continued complicated stuff 5 complicated stuff 6 2 continued complicated stuff 6 C:\test>