sub WriteSpinData { my ($OUT_FH) = shift @_; my ($ref_data) = shift @_; my ($last_major_frame, $line, @cur_spin ); #@cur_spin holds spin data for latest chunk my ($row_length) = 15*160+1; for my $filename (sort keys %{ $ref_data }) { my ($basename) = basename $filename; for my $major_frame_index ( sort { $a <=> $b } keys %{ $ref_data->{$filename} }) { ### Processing data for $basename [===| ] % done for my $minor_frame_index (keys %{ $ref_data->{$filename}->{$major_frame_index} }) { next if ($minor_frame_index !~ /\d+/); my @minor_frame_data = @{ $ref_data->{$filename}->{$major_frame_index}->{$minor_frame_index} }; my $cur_spin_cnt = (scalar @cur_spin > 0) ? scalar @cur_spin : 0; if ( ($cur_spin_cnt > 0) and ($cur_spin_cnt < $row_length) ) { push @cur_spin, @minor_frame_data[3..17]; next; } elsif ($cur_spin_cnt == $row_length) { push @cur_spin, @minor_frame_data[3..17]; my $line = join ",", @cur_spin; print $OUT_FH "$line\n"; @cur_spin = (); next; } elsif ($cur_spin_cnt == 0) { if (($minor_frame_data[3] == 165) and (($minor_frame_index % 10) == 0) ) { my $index = "$filename,$major_frame_index,$minor_frame_index"; @cur_spin = ($index, @minor_frame_data[3..17]); } next; } else { croak "should not be here - cur_spin_cnt $cur_spin_cnt, $filename,$major_frame_index,$minor_frame_index\n"; } } $last_major_frame = $major_frame_index; } print "$basename: " . int($last_major_frame) . " major frames.\n"; } }