Use of uninitialized value

Ask a Question related to Perl / CGI, Design and Development.

  1. #1

    Default Use of uninitialized value

    What may be wrong with my codes? Perl complains of use of uninitialized
    value at addition and in range (or flop).

    Thanks

    #########################################

    #!/usr/bin/perl -w
    use strict;

    my ($xi, $i, @numbers, @slice);
    @numbers = (1..10);
    $i = 0;
    $xi = 0;

    open(RS, ">perd.dat") || die "Could not open file. $!\n";
    for (my $z = 0; $z <= $#numbers; $z++){


    foreach (@numbers){
    @slice = @numbers[$xi, $numbers[$i] ..
    $numbers[$i]+4]; # Use of uninitialized value at here?
    print RS "@slice\n";
    $i++;
    }

    $xi++;

    }

    close(RS);

    ###################################
    Babs

    B. Fongo Guest

  2. Similar Questions and Discussions

    1. Error: Use of uninitialized value in print
      Why does <>; print; give the error "Use of uninitialized value in print" and while( <> ) {
    2. Net -> SCP - errstr uninitialized
      Code ---- #!/usr/bin/perl use strict; use warnings; &dhcpd; sub dhcpd {
    3. Fetchrow Uninitialized Values
      Hello all. I have a script that connects to a PostgreSQL database, executes a single SELECT, and dumps the results to the screen. Although it...
    4. Testing Uninitialized Vars
      I wan to write a sub return true or false if the var was initialized. Can someone correct this sub or is it good? ... if(isNULL($x) { print...
    5. RPM for 1.8.0 - uninitialized constant CONFIG
      In article <200306260507.h5Q57vuG016989@sharui.nakada.kanuma.tochigi.jp>, <nobu.nokada@softhome.net> wrote: One thing which tripped me up for a...
  3. #2

    Default Re: Use of uninitialized value

    On Tue, Oct 28, 2003 at 10:51:20PM +0100, B. Fongo wrote:
    > What may be wrong with my codes? Perl complains of use of uninitialized
    > value at addition and in range (or flop).
    >
    > #!/usr/bin/perl -w
    > use strict;
    >
    > my ($xi, $i, @numbers, @slice);
    > @numbers = (1..10);
    > $i = 0;
    > $xi = 0;
    >
    > open(RS, ">perd.dat") || die "Could not open file. $!\n";
    > for (my $z = 0; $z <= $#numbers; $z++){
    > foreach (@numbers){
    > @slice = @numbers[$xi, $numbers[$i] .. $numbers[$i]+4];
    > # Use of uninitialized value at here?
    > print RS "@slice\n";
    > $i++;
    > }
    > $xi++;
    > }
    You could write it more cleanly like this:

    my $path = 'perd.dat';
    open my $rs, $path or die "open: $path: $!";

    my @numbers = 1..10;

    for my $z (0..$#numbers) {
    for my $i (0..$#numbers) {
    print $rs @numbers[$z, $numbers[$i]..$numbers[$i]+4];
    }
    }

    Which gets rid of some of the unused variables and uses the more
    perlish foreach() loop. The problem is that you're indexing off
    the end of @numbers -- I assumed that you meant to reset $i each
    time through the outer loop (?) which fixes part of the problem,
    but you still have the situation where $i > 4.

    Look at the result of this expression when $z = 0 and $i = 5.

    print $rs @numbers[$z, $numbers[$i] .. $numbers[$i] + 4];
    --> print $rs @numbers[ 0, $numbers[5] .. $numbers[5] + 4];
    --> print $rs @numbers[ 0, 6 .. 6 + 4];
    --> print $rs @numbers[ 0, 6 .. 10 ];
    --> print $rs @numbers[ 0, 6, 7, 8, 9, 10 ];

    So the array slice yields:

    --> print $rs 1, 7, 8, 9, 10, undef;

    And this generates an "uninitialized value" warning.

    The next time through the inner loop, you end up with:

    print $rs @numbers[0, 7 .. 11]
    --> print $rs @numbers[0, 7, 8, 9, 10, 11]
    --> print $rs 1, 8, 9, 10, undef, undef;

    Which generates two warnings, and so forth.

    What are you really trying to do here?

    --
    Steve
    Steve Grazzini Guest

  4. #3

    Default RE: Use of uninitialized value

    B. Fongo <mygrps@fongo.de> wrote:
    :
    : What may be wrong with my code? Perl complains of
    : use of uninitialized value at addition and in range
    : (or flop).

    : #########################################
    :
    : #!/usr/bin/perl -w
    : use strict;
    :
    : my ($xi, $i, @numbers, @slice);
    : @numbers = (1..10);

    This array has 10 items in it. @number[ 0 .. 9 ]

    : $i = 0;
    : $xi = 0;
    :
    : open(RS, ">perd.dat") || die "Could not open file. $!\n";
    : for (my $z = 0; $z <= $#numbers; $z++){
    :
    :
    : foreach (@numbers){

    Comment the next two lines out and add:

    printf
    "%3s: \@slice = \@numbers[ \$number[ %s ]," .
    "\$number[ %2s ] .. \$number[ %2s ] + 4 ]\n",
    ++$iter, $xi, $i, $i, $#numbers;

    : @slice = @numbers[$xi, $numbers[$i] ..
    : $numbers[$i]+4];
    : print RS "@slice\n";
    : $i++;
    : }
    :
    : $xi++;
    :
    : }
    :
    : close(RS);

    This is some of what I got. Notice that by
    the seventh iteration you are using indexes
    for @numbers that have no value. $number[6]
    when incremented by 4 gives an index of 10.


    1: @slice = @numbers[ $number[ 0 ],$number[ 0 ] .. $number[ 0 ] + 4 ]
    2: @slice = @numbers[ $number[ 0 ],$number[ 1 ] .. $number[ 1 ] + 4 ]
    3: @slice = @numbers[ $number[ 0 ],$number[ 2 ] .. $number[ 2 ] + 4 ]
    4: @slice = @numbers[ $number[ 0 ],$number[ 3 ] .. $number[ 3 ] + 4 ]
    5: @slice = @numbers[ $number[ 0 ],$number[ 4 ] .. $number[ 4 ] + 4 ]
    6: @slice = @numbers[ $number[ 0 ],$number[ 5 ] .. $number[ 5 ] + 4 ]
    7: @slice = @numbers[ $number[ 0 ],$number[ 6 ] .. $number[ 6 ] + 4 ]
    <--
    8: @slice = @numbers[ $number[ 0 ],$number[ 7 ] .. $number[ 7 ] + 4 ]
    <--
    9: @slice = @numbers[ $number[ 0 ],$number[ 8 ] .. $number[ 8 ] + 4 ]
    <--
    10: @slice = @numbers[ $number[ 0 ],$number[ 9 ] .. $number[ 9 ] + 4 ]
    <--
    11: @slice = @numbers[ $number[ 1 ],$number[ 10 ] .. $number[ 10 ] + 4 ]
    <--
    12: @slice = @numbers[ $number[ 1 ],$number[ 11 ] .. $number[ 11 ] + 4 ]
    <--
    [arrows added]


    HTH,

    Charles K. Clarkson
    --
    Head Bottle Washer,
    Clarkson Energy Homes, Inc.
    Mobile Home Specialists
    254 968-8328















    Charles K. Clarkson Guest

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139