my %products; ... if (/^Product\sname:\s(\w.*)/) { $name = $1; $products{$name} = []; } if (/^Option\sName:\s(\w.*)/) { push(@{$products{$name}}, $1); } ... foreach my $name (keys %products) { my $opts = $products{$name}; print($name, ': ', join(' ', @$opts), "\n"); }