in reply to Getting rid of uninitialized value warning (was: can't spot the error)

Well its almost certainly that there is an undef in one of the values you are printing. Adding
$array[13]="" unless defined $array[13]; $array[14]="" unless defined $array[14];
Should sort you out.

BTW, a more idomatic way to write your loop would be

while (<FILEHANDLE>) { chomp; my @array=split/\s+/; $array[13]="" unless defined $array[13]; $array[14]="" unless defined $array[14]; print "$array[13]\t$array[14]\n"; print OUTFILE "$array[13]\t$array[14]\n"; }

Yves / DeMerphq
---
Writing a good benchmark isnt as easy as it might look.

Replies are listed 'Best First'.
Re: Re: can't spot the error
by converter (Priest) on May 07, 2002 at 17:29 UTC
    An even more idiomatic way might be:
    while (<FILEHANDLE>) { chomp; my @array = split; next unless @array >= 15; ... }

    conv

      While I agree that your snippet is more idiomatic, it isnt the same thing as what the OP provided.
      $_=" a b c d e f g h"; @list=split/\s+/; print "split /\\s+/ : "; foreach my $i (0..$#list) { printf "%2d '%s', ",$i,$list[$i]; } print "\n"; @list=split; print "split : "; foreach my $i (0..$#list) { printf "%2d '%s', ",$i,$list[$i]; } print "\n"; __END__ split /\s+/ : 0 '', 1 'a', 2 'b', 3 'c', 4 'd', 5 'e', 6 'f', +7 'g', 8 'h', split : 0 'a', 1 'b', 2 'c', 3 'd', 4 'e', 5 'f', 6 'g', + 7 'h',
      And while I'm being pedantic :-) why do @array >= 15 when @array>14 does the same thing?

      *grin*

      Yves / DeMerphq
      ---
      Writing a good benchmark isnt as easy as it might look.