use strict; use warnings; open my $inFH, q{<}, \ <<__EOD__ or die $!; Title 1 Line of text A Line of text B Title 2 Line of text C Title 3 Title 4 Line of text D __EOD__ my @groups; while ( <$inFH> ) { if ( m{^Title} ) { unshift @groups, [ $_ ]; } else { push @{ $groups[ 0 ] }, $_; } } while ( my $group = shift @groups ) { print @{ $group }; }