open (SUM2,">$ARGV[0].sum.sorted"); my @records; { local $/ = /^\s+$/; # Step through text file from one blank line to the # next, grabbibg everything in between all at once. open IN2, "$ARGV[0].sum" or die "Cannot open data file.\n$!"; while ( my $record = ) { my @kv_pairs = split /\n/, $record; # Split each record into its lines, and store # each line as an array element. push @records, [@kv_pairs]; # Create an anonymous array that is a copy of @kv_pairs. # Push the anonymous array containing a complete set # of keys/values for a given record into the @records array # as an array of arrays. } close IN2; } print STDERR 'Record count: ', scalar @records; # ST sort... my @sorted_recs = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, (split /=\s+/,$_->[4])[1] ] } # The 5th line [4] of each record has a decimal number # after the "=". Grab that number and sort all records # by those numbers. @records; print SUM2 foreach @sorted_recs; close IN2; close SUM2;