====header info==== header header ====header info==== data data ====header info==== header header ====header info==== data .... #### #!/usr/bin/perl # snippet number 1 while () { if (/^====header/.../^====header/) { print "header: $_"; next; } print "data: $_"; next; } __DATA__ ====header info==== 10 to 50 line of text and numbers with irregular formatting ====header info==== 10 to 50 lines of text and... More text more text ====header info==== 10 to 50 line of text and numbers with irregular formatting ====header info==== 10 to 50 lines of text and... More text more text #### #!/usr/bin/perl # snippet number 2 my (@records,@tmp); while () { chomp; if (/^====header/) { next unless @tmp; push @records, [ @tmp ]; @tmp = (); next; } push @tmp, $_; } push @records, [ @tmp ] if @tmp; print "@$_\n" for @records; __DATA__ ====header info==== 10 to 50 line of text and numbers with irregular formatting ====header info==== 10 to 50 lines of text and... More text more text ====header info==== 10 to 50 line of text and numbers with irregular formatting ====header info==== 10 to 50 lines of text and... More text more text