sub WriteSpinData { my ($OUT_FH, $ref_data) = @_; my ($last_major_frame, @cur_spin ); my $row_length = 15*160+1; for my $filename (sort keys %{ $ref_data }) { my ($basename) = basename $filename; for my $major ( sort { $a <=> $b } keys %{ $ref_data->{$filename} }) { ### Processing data for $basename [===| ] % done for my $minor (keys %{ $ref_data->{$filename}{$major} }) { next if $minor !~ /\d+/; my @data = @{ $ref_data->{$filename}{$major}{$minor} }; if ( !@curspin ) { # This looks wonky ... you should double check this # At the very least, the 165 should be in a constant and # a comment should be here explaining why only $minors that are # divisible by 10 are allowed to start a @curspin if (($data[3] == 165) and (($minor % 10) == 0) ) { my $index = "$filename,$major,$minor"; @cur_spin = ($index, @data[3..17]); } next; } push @cur_spin, @data[3..17]; if ( @cur_spin == $row_length ) { print $OUT_FH join(",", @cur_spin), "\n"; @cur_spin = (); } } $last_major_frame = $major; } print "$basename: " . int($last_major_frame) . " major frames.\n"; } return; }