[Info-vax] Perl 5.34.0 for OpenVMS x86_64 installation kit available
Craig A. Berry
craigberry at nospam.mac.com
Wed Oct 20 17:48:39 EDT 2021
On 10/20/21 3:25 PM, hb wrote:
> On 10/20/21 9:22 PM, Craig A. Berry wrote:
>> On 10/20/21 12:32 PM, hb wrote:
>>> On 10/20/21 2:34 PM, Craig A. Berry wrote:
>>>> I've replaced it with an ordinary zip file (not self-extracting):
>>>>
>>>> <https://sourceforge.net/projects/vmsperlkit/files/VMSPORTS-X86VMS-PERL534-T0534-0-1.zip/download>
>>>>
>>>>
>>>>
>>>> See if that works any better.
>>
>>> Worked for me. Using it, I get an unexpected "Hexadecimal number >
>>> 0xffffffff non-portable" which I didn't see in perl 5, version 28 on
>>> IA64.
>>
>> It's a very old warning (about 20 years). The C code that does the
>> actual check is here:
>>
>> <https://perl5.git.perl.org/perl5.git/blob/a31d0367bbf1e97bab6eece95b47ca513e1834a6:/numeric.c#l577>
>>
>>
>> The check only happens if the size of a Perl integer is greater than 32
>> bits, so I suspect the difference is that I didn't make 64-bit integers
>> the default until just a couple of years ago:
>>
>> <https://perl5.git.perl.org/perl5.git/commit/c6981b9a20742358c4af17bc46ba8d20a1c46d07?f=configure.com>
>>
>>
>> and the first stable release in which the default changed would have
>> been Perl 5.32.0. In other words, nothing to do with running on x86.
>>
>> I think you can turn off that warning by putting
>>
>> no warnings 'portable';
>>
>> in the same lexical scope as the code that triggers it.
> With perl 5, version 28 on IA64, I see:
> $ perl -e "my $x=0x100000000;"
> Integer overflow in hexadecimal number at -e line 1.
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
More information about the Info-vax
mailing list