(My first post for, hope I use the correct format)
I need to evaluate code that processes 64-bit integers in the "Safe" compartment. Since I supply both the script and the code for the evaluation, I could do a normal evaluation, but I wanted to try to make things more reliable from unintentional errors using "Safe".
Should I expect Math :: Int64 to work correctly inside a "safe" coupe? I get conflicting results on different Perl versions, integer bit widths and OS. (See below).
All failure happens the same inside the debugger.
I am sure that I am making the wrong assumption in some place, but I cannot figure out where.
Thanks for any help you can give.
Sample Code (dummy.pl)
use strict; use warnings; use Exporter; use Safe; use Math::Int64 qw(int64 hex_to_int64);
Execution examples
% perl -w dummy.pl === "Win7 x64 SP1, Strawberry Perl 5.12.3" === Value of X : 67, Type: Math::Int64 Can't locate package Exporter for @Math::Int64::ISA at (eval 5) line 1. ... Can't locate package Exporter for @Math::Int64::ISA at (eval 5) line 1. Value of Z : 67, Type: Math::Int64 Value of Xe: 67, Type: Math::Int64 === "Win XP SP3 32-bit Strawberry Perl 5.16.0" === Value of X : 67, Type: Math::Int64 Value of Z : 8E, Type: scalar Value of Xe: 8E, Type: scalar (No ':native-if-available') === "Ubuntu 10.04 x86_64 Server, Perl 5.10.1" === Value of X : 67, Type: Math::Int64 Value of Z : 4D, Type: scalar Value of Xe: 4D, Type: scalar (':native-if-available') === "Ubuntu 10.04 x86_64 Server, Perl 5.10.1" === Value of X : 67, Type: scalar Value of Z : 71, Type: scalar Value of Xe: 71, Type: scalar % perl -wd dummy.pl All versions return effectively: Value of X : 67, Type: Math::Int64 Error: Undefined subroutine &Math::Int64::hex_to_int64 called at c:/.../perl5db. at dummy.pl line 35 main::evalme('$X = 0xFF & (hex_to_int64("0xAA12345678") >> 4)', 'Safe=HASH(xxxxxxxx)'
Version
"Win7 x64 SP1, Strawberry Perl 5.12.3": Platform: osname=MSWin32, osvers=6.1, archname=MSWin32-x64-multi-thread uname='Win32 strawberryperl 5.12.3.0 #1 Sun May 15 09:43:50 2011 x64' use64bitint=define, use64bitall=undef, uselongdouble=undef Compiler: intsize=4, longsize=4, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='long long', Characteristics of this binary (from libperl): Compile-time options: ... USE_64_BIT_INT "Win XP 32-bit Strawberry Perl 5.16.0": Platform: osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread uname='Win32 strawberry-perl 5.16.0.1 #1 Mon May 21 22:07:30 2012 i386' use64bitint=undef, use64bitall=undef, uselongdouble=undef Compiler: intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='long long', Characteristics of this binary (from libperl): Compile-time options: ... "Ubuntu 10.04 x86_64 Server, Perl 5.10.1": Linux 2.6.32-31-server, Platform: use64bitint=define, use64bitall=define, uselongdouble=undef Compiler: intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', Characteristics of this binary (from libperl): Compile-time options: ... USE_64_BIT_ALL USE_64_BIT_INT