scp@acl.lanl.gov (Stephen C. Pope) (01/11/91)
For those interested: I got pl41 up and running on a GS2000 running os 2.2. Passes all tests if compiled without optimization; with optimization, it fails bad on lib.big. Problem has something to do with arrays: I fixed up bigint.pl with some print statements (see below), to demonstrate the problem. Using the perl compiled with -O, running this simple program: #! ./perl do './bigint.pl'; print &badd('1','0') . "\n"; produced this output: % ./tt start add loop $x = 1 $#x = 0 @x = 1 end add loop $x = 1 $#x = 0 @x = 1 after add loop $#x = -1 @x = +0 % Of course, The one element in @x shouldn't have been lost! One would assume the compiler was at fault... Here's the bigint.pl code I modified: sub add { #(int_num_array, int_num_array) return int_num_array local(*x, *y) = @_; $car = 0; for $x (@x) { print "start add loop \$x = $x \$\#x = $#x \@x = @x\n"; last unless @y || $car; $x -= 100000 if $car = (($x += shift @y + $car) >= 100000); print "end add loop \$x = $x \$\#x = $#x \@x = @x\n"; } print "after add loop \$\#x = $#x \@x = @x\n"; for $y (@y) { last unless $car; $y -= 100000 if $car = (($y += $car) >= 100000); } (@x, @y, $car); } stephen pope advanced computing lab, lanl scp@acl.lanl.gov