我通过Perlbrew 使用 Perl 5.8.9 对此没有任何问题:
#! /usr/bin/env perl
use strict;
use warnings;
my $num = 0x80000000;
print "$num\n"; # No quotes make this a number and not a string
这会打印出2147483648,这是0x8000000 的十进制值。
你在哪个平台上?
您可能想要做的是在 hex 中打印出这个十六进制数字,而不是十进制。你仍然可以使用++ 来增加它,但是要以十六进制打印出来,你需要printf:
#! /usr/bin/env perl
#
use strict;
use warnings;
use Data::Dumper;
my $num = 0x80000000;
for my $loop (0..100) {
$num++;
printf "%-20x\n", $num;
}
打印出来:
80000001
80000002
80000003
80000004
80000005
80000006
80000007
80000008
80000009
8000000a
...
如果0x80000000 确实是一个字符串,那么在我使用 Perl 5.8.9 的系统上使用 hex 将其转换为数字是没有问题的。
#! /usr/bin/env perl
use strict;
use warnings;
my $num = "0x80000000"; # This is a string
$num = hex $num; # Now it's a number
print "$num\n"; # Prints 2147483648 because `$num` is numeric
正如我所说。这是 Perl 5.8.9(我无法在 Perlbrew 上获得 5.8.8),这是在 Mac 上。也许您的平台有点不同。它是带有 32 位版本的 SunOS 或 Solaris 的旧 Solaris 系统吗?
我查看了 5.8.8 文档并注意到 standard 发行版确实内置了 Bigint support。它还附带了模块 Math::Bigint。
你确定你没有 Bigint 支持吗?