use strict; use warnings; my $fileStr = <)) { my %recordData = map{split /\s+/, $_} grep {length $_} split "\n", $record; my @solvents = grep {/^solvent\d+/} keys %recordData; my @fractions = grep {/^F\d+/} keys %recordData; my ($zeroSolvent) = grep {!$recordData{$_}} @solvents; print "${zeroSolvent}_$_ => $recordData{$_}\n" for @fractions; }