blu@millipore.com (Brian Utterback) (11/17/90)
As has already been noted, perl level 41 fails the test. There seems to be
a problem with the cmp operator and possibly the || op as well.
I distilled the failing test down to the following test cases. I think this
illustrates the problem. Unfortunately I am not a Perl internals hacker
so I can't go any further. I am great at getting test cases though.
Perl Script follows:
#!/bin/perl
print (-123 cmp ',');
print "\n";
print (0||516);
print "\n";
print (-123 cmp -124);
print "\n";
This script print out the following:
712
516
-26876
Now unless I am wrong, cmp should only ever return -1, 0 or 1 and isn't that
supposed to be true of ||? It is clear that the bigint lib depends on
cmp only returning 0, -1 or 1.
--
Brian Utterback, Millipore Corporation, 75G Wiggins Ave., Bedford Ma. 01730
Work:617-275-9200x8245, Home:603-891-2536
INTERNET:: blu@millipore.millipore.com
UUCP:: {samsung,cg-atla,merk,wang,bu-tyng}!millipore!blulwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (11/17/90)
In article <1990Nov16.192134.15095@millipore.com> blu@millipore.com (Brian Utterback) writes:
: As has already been noted, perl level 41 fails the test. There seems to be
: a problem with the cmp operator and possibly the || op as well.
Yes, cmp was assuming that memcmp returned -1, 0 or 1 when it's not
documented to do so. >>patch42.
The || behavior is correct. $a || $b || $c will return the first true value.
Larry