Right, there is harder reckoning when you have 32-bit integers so the
warning you encountered in a 64-bit Perl isn't necessary.
> $ perl -e "use bigint; my $x=0x100000000;"
> $ perl -e "use warnings; use bigint; my $x=0x100000000;"
> $
>
> With perl 5, version 34 on X86, I see:
> $ perl -e "my $x=0x100000000;"
> $ perl -e "use bigint; my $x=0x100000000;"
> $ perl -e "use warnings; use bigint; my $x=0x100000000;"
> Hexadecimal number > 0xffffffff non-portable at -e line 1.
With Perl 5.26.2 on macOS:
$ perl -e 'use warnings; use bigint; my $x=0x100000000;'
Hexadecimal number > 0xffffffff non-portable at -e line 1.
which happens to have 64-bit integers:
$ perl -'V:uvsize'
uvsize='8';
I've never used the bigint extension. It says on the tin, "Integer
constants are created as proper BigInts." I think you may have found
that a hexadecimal constant is not actually being considered an integer
constant. Whether that is a bug or a feature I don't know. It does
have a hex function, which may get you what you want:
$ perl -e "use warnings; use bigint; my $x=hex('0x100000000'); print
qq/$x\n/;"
4294967296