2013-04-22 523 views
4

我可以超過Perl的範圍迭代界限像這樣,有或無-Mbigint如何確定perl範圍迭代器的最大範圍?

$» perl -E 'say $^V; say for (0..shift)' 1e19 
v5.16.2 
Range iterator outside integer range at -e line 1. 

我怎麼能確定這個上限,而不只是嘗試,直到我超過它?

+0

嘗試(2 ** 31)-1或(2 ** 63)獲得-1 – mob 2013-04-22 21:24:28

回答

7

這是一個IV。

>>同樣適用於整數,所以你可以使用

my $max_iv = -1 >> 1; 
my $min_iv = -(-1 >> 1) - 1; 

它們也可以從一個IV的大小的。

my $max_iv = (1 << ($iv_bits-1)) - 1; 
my $min_iv = -(1 << ($iv_bits-1)); 

的IV的大小可以使用

use Config qw(%Config); 
my $iv_bits = 8 * $Config{ivsize}; 

my $iv_bits = 8 * length pack 'j', 0; 
+0

+ 1提醒我'j'格式說明符! – pilcrow 2013-04-23 14:49:46