in reply to length of 1's

Is that your real program? You never open INFILE, so you never read anything from it, so you never add anything to @newseq. Use use strict; and use warnings;. You would have gotten

Name "main::INFILE" used only once: possible typo at a.pl line 18. readline() on unopened filehandle INFILE at a.pl line 18.

instead of having to waste your time waiting for a reply here.

Other problems:

Replies are listed 'Best First'.
Re^2: length of 1's
by coldy (Scribe) on Apr 27, 2009 at 04:51 UTC
    use warnings results in this warning;

    Use of uninitialized value in numeric eq (==) at bin2runs.pl line 32

    Without any better ideas, I tried changing the ==0 to ==$zero, and initializing $zero earlier (my $zero =0), to no success. Other than the warnings the script works.

      Not for the code you gave. Line 32 is a blank line. I can't speculate about code I know nothing about.
        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"; } }
        32 is this line ( Ive not posted all the code as most is not relevant) if ($bin$i==0){