#!/usr/bin/perl use strict; use warnings; my $header =""; while (defined (my $line= )) { next if $line =~ /^\s*$/; # skip blank lines chomp $line; if ($line =~ /^JOB::/) { print "$line\n"; } elsif ($line =~ /^Something\s*$|^Something Else\s*$/ ) { $header = $line; # don't print this line } else { print "$header $line\n"; #print line with current sub-header } } =PRINTS: JOB::HEREISASTRING Something StringA Something StringB Something StringC Something StringD Something Else StringE Something Else StringF Something Else StringG Something Else StringH JOB::HEREISANOTHERSTRING Something StringI Something StringJ Something StringK Something StringL Something Else StringM Something Else StringN Something Else StringO Something Else StringP =cut __DATA__ JOB::HEREISASTRING Something StringA StringB StringC StringD Something Else StringE StringF StringG StringH JOB::HEREISANOTHERSTRING Something StringI StringJ StringK StringL Something Else StringM StringN StringO StringP