sprint一个64位的数字

时间:2017-06-29 07:18:13

标签: perl 64-bit

我想将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了解更多详情

有谁知道我的问题来自哪里?

2 个答案:

答案 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;应该可以解决问题。