in reply to Parsing a Tagged File Format

Maybe not exactly what you want, but this should get out started
use Data::Dumper; my $data = <<TXT; T1 Line1 T2 Line2 Line3 Line4 T3 Line5 Line6 ER TXT my(%h, $k); for(split /\n/, $data) { last if /^ER\z/; /^(T\d+)/ and $k = $1; push @{ $h{$k} }, m< (?: T\d+ )? \s+ (.*) >x; } print Dumper(\%h); __output__ $VAR1 = { 'T1' => [ 'Line1' ], 'T2' => [ 'Line2', 'Line3', 'Line4' ], 'T3' => [ 'Line5', 'Line6' ] };
You could probably compact that process into a regex and a map(), but that for and split() should be easier to maintain :)
HTH

_________
broquaint