我想将64位数字打印到另一个变量中。
#!/bin/perl
use strict;
use bigint;
my $str = "";
my $long_number = -1;
$str = sprintf("%016X", $long_number);
但是当我打印$str
时,我看到00000000ffffffff
。
就像Perl认为我的$long_number
是32位数字一样。
我检查了我的Perl版本。它看起来是正确的:
perl --version
这是为sun4-solaris-64int构建的perl,v5.8.4(已注册37个 补丁,请参阅perl -V了解更多详情
有谁知道我的问题来自哪里?
答案 0 :(得分:2)
虽然你在64位Solaris上运行,但很可能你有一个32位的Perl。
您可以运行Network
(大写V)并检查编译时选项:
perl -V
或Characteristics of this binary (from libperl):
Compile-time options: PERL_MALLOC_WRAP PERL_USE_SAFE_PUTENV
*USE_64_BIT_INT* USE_LARGE_FILES USE_PERLIO
;大小8表示64位,4 32位。
答案 1 :(得分:2)
你的Perl确实使用perl -v
暗示的64位整数。这是由perl -V:ivsize
返回8
确认的。
问题与use bigint;
有关。使用它会导致-1
替换为Math::BigInt->new(-1)
,并且该对象的编号是您要打印的内容。我敢打赌,该对象的数字会返回-1
的32位表示。
删除use bigint;
应该可以解决问题。