my @records; { local $/ = "\n\n"; open IN, " ) { my @kv_pairs = split /\n/, $record; push @records, [@kv_pairs]; } close IN; } my @sorted_recs = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, (split /:\s*/, $_->[3])[1] ] } @records;