use strict; use warnings; my $fileStr = <## # Look for the empty line between records local $/ = "\n\n"; while (defined (my $record = <$fIn>)) { #### 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; } #### solvent1_F101 => 3.2 solvent1_F001 => 1.2 solvent2_F101 => 7.2 solvent2_F001 => 2.2 #### 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; }