On Sunday 07 October 2007 15:31, Clinton Gormley wrote:
> > -no warnings qw(uninitialized);
> > +no warnings qw(uninitialized portable);
>
> This patch certaily removes the warnings, and all of the tests pass. But
> does that mean that the module works correctly?

Yes, I think so. The point is 64bit integers are not portable to 32bit perls. 
Hence, even on a 64bit system with warnings enabled a non-portable warning is 
issued:

# perl -we 'print hex("100000002"),"\n",2**32+2,"\n"'
Hexadecimal number > 0xffffffff non-portable at -e line 1.
4294967298
4294967298

The same on a 32bit perl throws an additional overflow warning:

$ perl -we 'print hex("100000002"),"\n",2**32+2,"\n"'
Integer overflow in hexadecimal number at -e line 1.
Hexadecimal number > 0xffffffff non-portable at -e line 1.
4294967298
4294967298

Nevertheless the arithmetic is correct. 0xffffffff is 4294967295. Add 3 and 
you get 4294967298.

Now try on a 64bit system the command again but turn warnings into errors:

# perl -e 'use warnings FATAL=>qw/all/; print 
hex("100000002"),"\n",2**32+2,"\n"'
Hexadecimal number > 0xffffffff non-portable at -e line 1.

This is what happens on Max' system.

Now turn of the portable warning:

# perl -e 'use warnings FATAL=>qw/all/; no warnings "portable"; print 
hex("100000002"),"\n",2**32+2,"\n"'
4294967298
4294967298

But on a 32bit perl we still get an error:

$ perl -e 'use warnings FATAL=>qw/all/; no warnings "portable"; print 
hex("100000002"),"\n",2**32+2,"\n"'
Integer overflow in hexadecimal number at -e line 1.


Torsten

Attachment: pgpy3cq5q1r6W.pgp
Description: PGP signature

Reply via email to