[Info-vax] Perl 5.34.0 for OpenVMS x86_64 installation kit available

hb end.of at inter.net
Wed Oct 20 18:04:02 EDT 2021


On 10/20/21 11:48 PM, Craig A. Berry wrote:
> 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
> 

I found a workaround: (0xffffffff+1).



More information about the Info-vax mailing list