in reply to Refactoring nested if block

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->{$filena +me} }) { ### 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 thi +s # At the very least, the 165 should be in a consta +nt and # a comment should be here explaining why only $mi +nors 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; }

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?