Ask a Question related to Perl / CGI, Design and Development.
-
B. Fongo #1
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
-
Error: Use of uninitialized value in print
Why does <>; print; give the error "Use of uninitialized value in print" and while( <> ) { -
Net -> SCP - errstr uninitialized
Code ---- #!/usr/bin/perl use strict; use warnings; &dhcpd; sub dhcpd { -
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... -
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... -
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... -
Steve Grazzini #2
Re: Use of uninitialized value
On Tue, Oct 28, 2003 at 10:51:20PM +0100, B. Fongo wrote:
You could write it more cleanly like this:> 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++;
> }
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
-
Charles K. Clarkson #3
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



Reply With Quote

