in reply to Re^3: length of 1's
in thread length of 1's

Here is all my code, warning on first if line.
!/usr/bin/perl -w use strict; open(INFILE,"<$ARGV[0]") or die "can't open $ARGV[0]"; open(OUTFILE,">$ARGV[1]") or die "can't open $ARGV[1]"; my @result = split '', 'abcdefghijklmno'; my @arg1 = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); my %rules; # Build the rules hash $rules{$arg1[$_]} = $result[$_] for 0 .. $#result; my $run = 0; my @bin = (); my @newseq = (); while ( <INFILE> ) { chomp; @bin= split(//, $_); for my $i (0..$#bin) { if ($bin[$i]==0){ $run=0; push @newseq,$run; } elsif ($bin[$i]==1 && $bin[$i+1]==0||$bin[$i+1]==0)){ $run++; push @newseq, $run; } else { $run++; } } } my $m = $#newseq+1; for (1 .. $m) { if ( $_ % 80 != 0){ print OUTFILE "$rules{$newseq[$_-1]}"} else{ print OUTFILE "$rules{$newseq[$_-1]}\n"; } }

Replies are listed 'Best First'.
Re^5: length of 1's
by ikegami (Patriarch) on Apr 27, 2009 at 05:30 UTC

    warning on first if line.

    Errors in a statement can appear to originate on the first line of the statement. That means the warning can be (and is) issued by the elsif condition.

    I already told you how to fix it (3rd item). It occurs when the last element of @bin is a one and you peek past then end of the array.

      ah that did it, thanks for persisting with my ignorance.