sub WriteSpinData { my ($OUT_FH, $ref_data) = @_; my $frames_per_row = 65; for my $filename (sort keys %$ref_data ) { my $basename = basename $filename; # create a list of major frames for the file my @majors = map { $ref_data->{$filename}{$_} } sort { $a <=> $b } keys %{ ref_data->{$filename} }; for my $major ( @majors ) { # join all minor frames together my @minors = map { $major->{$_} } sort { $a <=> $b } # assuming sorted grep { /\d+/ } keys %$major; # print them a row at a time while ( my @row = splice( @minors, 0, $frames_per_row ) ) { my $row_name = find_row_name( @row ); my @data = map { @{$_}[3..17] } @row; print $OUT_FH join( q{,}, $row_name, @data ), "\n"; } } print "$basename: " . @majors . " major frames.\n"; } }