【发布时间】:2012-01-24 06:04:41
【问题描述】:
List::Gen 中的 cartesian 函数似乎受到我的 64 位 Windows 操作系统上无符号 32 位上限的限制:
use strict;
use warnings;
use List::Gen '*';
use 5.010;
use bigint; # This didn't help either
say $List::Gen::VERSION; # 0.80
my $diameters = range( 1, 175 );
my @five_in_a_row = ( $diameters ) x 5;
my $combinations = cartesian { \@_ } @five_in_a_row;
say 0+@$combinations; # Should be 175**5 == 164_130_859_375
# prints -1+2**31 == 2_147_483_647
有没有办法克服这个限制?我的 Perl 构建详细信息如下。
> perl -v这是 perl 5, version 12, subversion 3 (v5.12.3) 为 MSWin32-x64-multi-thread(有 9 个注册补丁,参见 perl -V for 更详细)
【问题讨论】:
-
操作系统“位数”无关紧要。看起来它是 Perl 的 64 位版本,所以应该使用 64 位整数。请确认
perl -V:ivsize是8。 -
@ikegami :
ivsize='8'; -
我在
cartesian中得到“不是数组引用”。它正在尝试对@five_in_a_row的内容进行数组解引用。 -
@ikegami :我使用的是旧版本的
List::Gen(0.80)。为我工作。 -
@ikegami:你也可以试试
my @five_in_a_row = ( [ @$diameters ] ) x 5;。或者完全忘记范围并使用( [ 1..175 ] ) x 5;。问题依然存在。
标签: perl 32bit-64bit